BackgroundWorker RunWorkerCompleted事件

我的C#应用​​程序有几个后台工作人员。 有时候一个后台工作人员会开火。 当第一个后台工作器完成并且RunWorkerCompleted事件被触发时,该事件将在哪个线程触发,UI或调用RunWorkerAsync的第一个后台工作器? 我正在使用Microsoft Visual C#2008速成版。 任何想法或build议,你可能会感激。 谢谢。

如果BackgroundWorker是从UI线程创build的,那么RunWorkerCompleted事件也将在UI线程上引发。

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

有趣的是,这似乎并没有在MSDN上得到很好的logging。 我能find的最好的参考是在这里 :

在您的应用程序中实现multithreading的首选方法是使用BackgroundWorker组件。 BackgroundWorker组件使用事件驱动的multithreading模型。 后台线程运行您的DoWork事件处理程序,并且创build您的控件的线程运行您的ProgressChanged和RunWorkerCompleted事件处理程序。 您可以从ProgressChanged和RunWorkerCompleted事件处理程序调用您的控件。