如果
BackgroundWorker是从UI线程创建的,则
RunWorkerCompleted事件还将在UI线程上引发。
如果是从后台线程创建的,则事件将在未定义的后台线程上引发(不一定是同一线程,除非您使用custom
SynchronizationContext)。
有趣的是,这似乎并没有在MSDN上得到充分记录。我能够找到的最佳参考是在这里:
在您的应用程序中实现多线程的首选方法是使用BackgroundWorker组件。的BackgroundWorker的组件使用一个事件驱动的模型为多线程。
后台线程运行您的 DoWork事件处理程序,而创建控件的线程运行您的ProgressChanged和RunWorkerCompleted事件处理程序。您可以从ProgressChanged和RunWorkerCompleted事件处理程序中调用控件。



