2012-03-06 113 views
0

我正在寫一個Windows Forms應用程序,並對BackgroundWorkers進行了大量使用,並且存在一個讓我擔心的問題。以下是一個示例情況:可以通過BackgroundWorker.RunWorkerCompleted事件處理程序中斷Button.Click事件處理程序嗎?

  1. BackgroundWorker執行耗時的操作。
  2. 當BackgroundWorker仍在運行時,用戶按下窗體上的按鈕。
  3. Button.Click事件處理程序啓動它的執行,完成一些語句,但它們中有更多。
  4. 此時,BackgroundWorker完成它的任務,或引發異常,因此控件應該轉到BackgroundWorker.RunWorkerCompleted事件處理程序。

嗯,我的問題是:BackgroundWorker.RunWorkerCompleted事件處理程序是否有可能中斷Button.Click事件處理程序的執行?

回答

0

DoWork完成時,將在啓動BackgroundWorker的線程上調用RunWorkerCompleted。我們說這是主線。這意味着它會在主線程的消息隊列中發佈消息。如果主線程當前正在處理消息(例如,Button.Click事件),則RunWorkerCompleted將位於線程的消息隊列中,直到消息到達。含義 - 它不會中斷/碰撞按鈕事件處理程序。