Как сразу отменить работающий BackgroundWorker? - PullRequest
6 голосов
/ 09 февраля 2012

У меня есть время, затрачиваемое на DoWork моего BackgroundWorker.

Всякий раз, когда я пытаюсь отменить задание с помощью backgroundWorker1.CancelAsync(), backgroundWorker1.CancellationPending становится ожидающим, и мне следует дождаться следующей итерации в моем DoWork, чтобы отменить задание и выйти из него самостоятельно.

Есть ли способ отменить задание сразу после его вызова?

1 Ответ

7 голосов
/ 09 февраля 2012

Нет. В общем случае вы не можете безопасно прекратить поток «немедленно», потому что он может содержать ресурсы, которые могут утечь, и, что более важно, он может содержать блокировки. Вы должны структурировать своего работника так, чтобы он соблюдал флаг отмены и как можно быстрее выходил.

...