可以通过BackgroundWorker.RunWorkerCompleted事件处理程序中断Button.Click事件处理程序吗?

时间:2012-03-06 10:33:52

标签: winforms backgroundworker buttonclick

我正在编写一个Windows Forms应用程序,大量使用BackgroundWorkers,并且有一个问题令我担心。以下是一个示例情况:

  1. BackgroundWorker执行它耗时的操作。
  2. 当BackgroundWorker仍在运行时,用户按下表单上的按钮。
  3. Button.Click事件处理程序启动它的执行,完成一些语句,但还有更多的语句。
  4. 此时,BackgroundWorker完成了它的任务,或者引发了异常,因此控件应该转到BackgroundWorker.RunWorkerCompleted事件处理程序。
  5. 好吧,我的问题是:BackgroundWorker.RunWorkerCompleted事件处理程序是否有可能中断Button.Click事件处理程序的执行?

1 个答案:

答案 0 :(得分:0)

DoWork完成后,将在启动RunWorkerCompleted的线程上调用BackgroundWorker。让我们说它是主线程。这意味着它将在主线程的消息队列中发布消息。如果主线程当前正在处理消息(例如,Button.Click事件),则RunWorkerCompleted将位于线程的消息队列中,直到它到达为止。含义 - 它不会中断/碰撞按钮事件处理程序。