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。