BackgroundWorker完成了事件 - 哪个线程?

时间:2009-03-22 03:50:31

标签: c# multithreading background

BackgroundWorker控件的已完成事件是否会返回到GUI线程上,或者我是否必须将其重新编组。

此外,进度事件是否会返回到GUI线程上,还是我必须将其封回?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

你可能来过这里,但另见:BackgroundWorker Events

答案 2 :(得分:3)

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

答案 3 :(得分: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