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