Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BackgroundWorker已完成事件是否在后台执行?_C#_.net_Backgroundworker - Fatal编程技术网

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

C# BackgroundWorker已完成事件是否在后台执行?,c#,.net,backgroundworker,C#,.net,Backgroundworker,假设,我做了一个像这样的背景工作 private void RunBackgroundWorker(object sender, DoWorkEventArgs e) { // Do something lengthy here // which takes a lot of time } private void BackgroundWorkerCompleted(object sender, RunWorkerCompletedEventArgs) { Syste

假设,我做了一个像这样的背景工作

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线程上执行的。我这样问是因为,我正在创建一个桌面应用程序,它使用数据库,并在UI线程上每隔几秒钟执行一次后不断更新数据库。说明:

必须小心不要操纵DoWork事件处理程序中的任何用户界面对象。相反,通过ProgressChanged和RunWorkerCompleted事件与用户界面通信


这就是说,Servy在评论中是正确的-您应该使用计时器在某个时间间隔执行代码,而不是BackgroundWorker。

我经常使用BackgroundWorker,可以看出RunWorkerCompleted事件肯定是在UI线程中运行的。此外,您还可以根据eventArgs字段将DoWork结果传递给,然后在RunWorkerCompleted中从eventArgs中获取它以执行一些依赖于UI的操作,如前所述

使用async/await如何?为什么不运行它并找出答案呢。毕竟你有代码。如果你想每2秒运行一些代码,你应该使用计时器,不是BackgroundWorker。如果有一个较长的进程,则应将其放入BackgroundWorker中,以防止冻结UI。@RickHodder RunWorkerCompleted事件不适用于长时间运行的进程,而是用于使用长时间运行的进程的结果更新UI。