BackgroundWorker已完成事件是否在后台执行?

时间:2013-11-27 20:49:02

标签: c# .net backgroundworker

假设我像这样BackgroundWorker

private void RunBackgroundWorker(object sender, DoWorkEventArgs e)
{
    //  Do something lengthy here
    // which takes a lot of time
}
private void BackgroundWorkerCompleted(object sender, RunWorkerCompletedEventArgs)
{
     System.Threading.Thread.Sleep(2000) ; 
     BackgroundWorker1.RunWorkerAsync() ; 
}

我想问一下BackgroundWorkerCompleted函数的内容是在“后台”线程还是主UI线程上执行的。我问这个是因为,我正在创建一个桌面应用程序,它使用数据库并且每隔几秒就会不断更新它的数据库

2 个答案:

答案 0 :(得分:2)

它在UI线程上执行。 MSDN解释说:

  

您必须小心不要操作DoWork事件处理程序中的任何用户界面对象。而是通过ProgressChanged和 RunWorkerCompleted 事件与用户界面进行通信。

也就是说,Servy在评论中是正确的 - 你应该使用Timer来执行代码间隔, a BackgroundWorker

答案 1 :(得分:1)

我经常使用BackgroundWorker并且可以判断在{i>}事件是肯定在UI线程中运行。此外,您可以将RunWorkerCompleted结果传递到相应的eventArgs字段,然后在DoWork中从eventArgs获取它以执行一些与UI相关的操作,如上所述here