Может ли обработчик событий Button.Click быть прерван обработчиком событий BackgroundWorker.RunWorkerCompleted?

Я пишу приложение Windows Forms с интенсивным использованием BackgroundWorkers, и меня беспокоит один вопрос. Вот примерная ситуация:

  1. BackgroundWorker выполняет трудоемкие операции.
  2. Пока BackgroundWorker все еще работает, пользователь нажимает кнопку в форме.
  3. Обработчик события Button.Click начинает свое выполнение, завершает некоторые операторы, но их больше.
  4. В этот момент BackgroundWorker завершает свою задачу или вызывает исключение, поэтому управление должно перейти к обработчику событий BackgroundWorker.RunWorkerCompleted.

Что ж, мой вопрос: есть ли возможность для обработчика событий BackgroundWorker.RunWorkerCompleted прервать выполнение обработчика событий Button.Click?


person Matvienko    schedule 06.03.2012    source источник


Ответы (1)


Когда DoWork завершится, RunWorkerCompleted будет вызван в потоке, запустившем BackgroundWorker. Допустим, это основной поток. Это означает, что он отправит сообщение в очередь сообщений основного потока. Если основной поток в настоящее время обрабатывает сообщение (например, событие Button.Click), то RunWorkerCompleted будет находиться в очереди сообщений потока, пока не прибудет очередь. Значение - он не будет прерывать/сталкиваться с обработчиком события кнопки.

person AVIDeveloper    schedule 06.03.2012