2012-03-06 73 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将位于线程的消息队列中,直到消息到达。含义 - 它不会中断/碰撞按钮事件处理程序。