Может ли обработчик события Button.Click быть прерван обработчиком события BackgroundWorker.RunWorkerCompleted? - PullRequest
0 голосов
/ 06 марта 2012

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

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

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

1 Ответ

0 голосов
/ 07 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...