4

BackgroundWorker 控件的已完成事件是否会在 GUI 线程上返回,或者我是否必须将其封送回来。

此外,进度事件是否会在 GUI 线程上返回,或者我是否必须将其编组?

4

4 回答 4

4

这两个事件都将被编组到 UI 线程上。

于 2009-03-22T03:54:55.543 回答
3

所有事件都将在创建 BackgroundWorker 实例的线程上返回。您的客户所要做的就是监听事件。

您可能来过这里,但另请参阅:BackgroundWorker 事件

于 2009-03-22T03:55:33.063 回答
3

它将在发起操作的 UI 线程上引发。在后台,BackgroundWorker 使用SynchronizationContext在两个线程之间进行封送处理。WPF 和 WinForms 都会在启动时安装适当的 SynchronizationContext。

于 2009-03-22T03:57:17.270 回答
2

如果 BackgroundWorker 是从 UI 线程创建的,那么这两个事件也将在 UI 线程上引发。

如果它是从后台线程创建的,则该事件将在未定义的后台线程上引发。

有关更多信息,请参阅此帖子和此连接问题。

https://stackoverflow.com/a/2806824/279999

http://connect.microsoft.com/VisualStudio/feedback/details/116930/backgroundworker-components-progresschanged-and-runworkercompleted-event-run-on-wrong-thread

于 2012-01-05T19:46:18.903 回答