Потоки фоновой работы не закрываются при закрытии программы?

У меня есть простая программа с фоновыми рабочими процессами, и она работает без остановки, и независимо от того, когда я ее закрываю, она всегда будет работать (или все), и я заметил, что закрытие приложения не полностью убей это. После его запуска несколько раз остаются процессы (по 1 на каждый запуск), которые остаются на вкладке процессов диспетчера задач Windows.

Почему они остаются? что мне сделать, чтобы они не ?

PS: я читал вопросы о поведении фонового рабочего при закрытии приложения, но я думаю, что тогда он не работает так, как предполагалось. Какие-либо предложения ?


person Marcelo    schedule 05.02.2010    source источник
comment
Мне нужно спросить: вы действительно используете только фоновый рабочий процесс или вы также создаете некоторые ручные потоки? Если да, то ручные потоки (new Thread()) должны иметь IsBackground = true;   -  person Rubens Farias    schedule 05.02.2010
comment
Я только что проверил это до того, как вы спросили, я использовал обычные потоки, прежде чем начать использовать backgroundworker, и теперь я посмотрел, не пропустил ли я кого-нибудь еще в коде, и нет, нормальных потоков нет, и когда я использовал их, они были IsBackground = true;   -  person Marcelo    schedule 05.02.2010


Ответы (2)


Лучший подход - остановить/убить поток, используя событие или пользовательское действие, прежде чем приложение будет закрыто.

как следует

private void ButtonStopBGWorker_Click(object sender, RoutedEventArgs e)
{
 BackgroundWorker worker = sender as BackgroundWorker;
 if ((worker.CancellationPending == true))
   {
      e.Cancel = true;
      break;
   }
}

Этот пост на форуме даст вам больше информации. Кроме того, загляните в MSDN, чтобы узнать, как управлять Потоки фоновой работы

Надеюсь, поможет

person Asad    schedule 05.02.2010

Это нити, которые вы сами плетете? Если вы создаете свои собственные потоки, я считаю, что вам нужно установить их в фоновые потоки, чтобы они завершались вместе с основным потоком. В противном случае они будут поддерживать процесс. Из памяти код для установки данного потока в фоновый режим выглядит примерно так:

Thread t = new Thread(YouStartMethod);
t.IsBackground = true;
t.Start();

Надеюсь это поможет

person soren.enemaerke    schedule 05.02.2010
comment
Нет, это фоновые темы (я не уверен, что могу так сказать, извините). Я не запускаю темы сам. - person Marcelo; 05.02.2010