2011-01-06 2 views
2

У меня есть вопрос о backgroundworker.C# Stop BackgroundWorker

У меня бесконечная петля в фоном. Как я могу остановить его?

+1

Пожалуйста, разместите код своего работника, чтобы мы могли получить более глубокое представление о том, в чем проблема. (даже если вы удалите блоки кода и просто покажите, где вы инициализируете работника, что делает ваш рабочий _vaguely_, что вы делаете, чтобы остановить его в настоящее время). –

ответ

10

Измените его на бесконечный цикл.

BackgroundWorker имеет встроенную поддержку для отмены. Для отмены фонового рабочего вызова BackgroundWorker.CancelAsync. Кроме того, необходимо изменить код уборщицы для проверки отмены, как указано в документации:

CancelAsync подает запрос о прекращении отложенной операции фона и устанавливает свойство CancellationPending истины.

Когда вы вызываете CancelAsync, ваш рабочий метод имеет возможность остановить его выполнение и выйти. Рабочий код должен периодически проверять свойство CancellationPending, чтобы узнать, установлено ли значение true.

Так, например, если у вас есть этот бесконечный цикл в вашем рабочем потоке:

while (true) 
{ 
    ... 
} 

, то вы можете изменить его на:

while (!backgroundWorker.CancellationPending) 
{ 
    ... 
} 

Для отмены работы необходимо также установить имущество BackgroundWorker.WorkerSupportsCancellation до true. Это можно сделать в дизайнере.

Смежные вопросы