我有一个GUI应用程序,需要运行长时间的计算(想想一分钟或更长时间),它处理这个问题的方法是将计算给予后台工作者。 (这部分很好)
我的问题是,如果我执行类似的操作:this.backgroundWorker.RunWorkerCompleted + = new System.ComponentModel.RunWorkerCompletedEventHandler(this.doSomethingElse);
doSomethingElse将在主UI线程上运行,还是在后台工作程序运行的线程池中运行?
感谢您提供的任何帮助。
它将在BackgroundWorker所在的同一个线程中运行,即最常见的是UI线程。
是doSomethingElse将在主UI线程上运行
是的,这是背景工作者的主要原因。 它有3个事件,只有DoWork将在一个单独的(ThreadPool)线程上执行。 已完成且ProgressChanged将被封送到“主”线程。
如果BackgroundWorker是从UI线程创建的,那么RunWorkerCompleted事件也将在UI线程上引发。
如果它是从后台线程创建的,则将在未定义的后台线程上引发该事件。
有关详细信息,请参阅此帖子和此连接问题。