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

问题描述 投票:9回答:3

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

我的问题是,如果我执行类似的操作:this.backgroundWorker.RunWorkerCompleted + = new System.ComponentModel.RunWorkerCompletedEventHandler(this.doSomethingElse);

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

感谢您提供的任何帮助。

c# backgroundworker
3个回答
6
投票

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


5
投票

是doSomethingElse将在主UI线程上运行

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


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

© www.soinside.com 2019 - 2024. All rights reserved.