BackgroundWorker RunWorkerCompleted事件

时间:2010-05-10 22:13:00

标签: c# .net multithreading events backgroundworker

我的C#应用​​程序有几个后台工作者。有时候一个后台工作人员会开火。当第一个后台工作程序完成并触发RunWorkerCompleted事件时,该事件将触发哪个线程,UI或从中调用RunWorkerAsync的第一个后台工作程序?我使用的是Microsoft Visual C#2008 Express Edition。任何您可能有的想法或建议将不胜感激。感谢。

2 个答案:

答案 0 :(得分:60)

如果从UI线程创建了BackgroundWorker,那么也会在UI线程上引发RunWorkerCompleted事件。

如果它是从后台线程创建的,则事件将在未定义的后台线程上引发(不一定是相同的线程,除非您使用自定义SynchronizationContext)。

有趣的是,这似乎并没有在MSDN上详细记录。我能找到的最佳参考是here

  

在您的应用程序中实现多线程的首选方法是使用BackgroundWorker组件。 BackgroundWorker组件使用事件驱动的模型进行多线程处理。 后台线程运行您的DoWork事件处理程序,创建控件的线程会运行您的ProgressChangedRunWorkerCompleted事件处理程序。您可以从您的控件中调用控件ProgressChangedRunWorkerCompleted事件处理程序。

答案 1 :(得分:0)

根据我的观察,RunWorkerCompleted 是在调用 RunWorkerAsync 的线程上执行的,该线程不一定是创建后台工作线程的线程。