C # Stop BackgroundWorker - PullRequest
       7

C # Stop BackgroundWorker

2 голосов
/ 06 января 2011

У меня вопрос по поводу backgroundworker.

У меня есть бесконечный цикл в backgroundworker.Как я могу это остановить?

1 Ответ

11 голосов
/ 06 января 2011

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

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

CancelAsync отправляет запрос на завершение отложенной фоновой операции и устанавливает для свойства CancellationPending значение true.

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

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

while (true)
{
    ...
}

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

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

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

...