backgroundworker完成事件处理程序的哪个线程运行?

时间:2010-11-18 22:24:18

标签: c# backgroundworker

我有一个需要运行长时间计算的GUI应用程序(想想一分钟或更长时间),它处理这个问题的方法是将计算方法提供给后台工作者。 (这部分没问题)

我的问题是,如果我做了类似的事情: this.backgroundWorker.RunWorkerCompleted + = new System.ComponentModel.RunWorkerCompletedEventHandler(this.doSomethingElse);

是doSomethingElse将在主UI线程上运行,还是在后台工作程序运行的线程池中运行?

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:6)

它将在Ba​​ckgroundWorker所在的同一个线程中运行,即最常见的是UI线程。

答案 1 :(得分:5)

  

是doSomethingElse将在主UI线程上运行

是的,这是背景工作者的主要原因。它有3个事件,只有DoWork将在一个单独的(ThreadPool)线程上执行。已完成且ProgressChanged将被封送到“主”线程。

答案 2 :(得分:4)

如果BackgroundWorker是从UI线程创建的,那么RunWorkerCompleted事件也将在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