c#等待后台工作者完成任务

时间:2017-12-29 13:24:11

标签: c# backgroundworker

所以我有一个后台工作人员来完成一项任务,我需要程序在继续之前等待这个任务完成,此时我正在这样做:

while(backgroundwork.IsBusy)
{
    Thread.Sleep(10);
}
然而,当我运行这个程序时,程序停止运行,看起来后台工作程序正在不断运行,但事实并非如此,工作程序中没有循环,而且它之前完成了任务。

我能错过什么?

3 个答案:

答案 0 :(得分:1)

您可以使用BackgroundWorker.RunWorkerCompleted活动。您可以等待WaitHandle(如autoresetevent),并通过RunWorkerCompleted事件发出信号。

答案 1 :(得分:1)

Thread.Sleep 用于等待指定时间,不执行任何操作。

Async wait 用于等待给定任务完成。

  

myMethod().wait() - 这里的myMethod将是你的异步方法   wait()是c#关键字,它会异步等待该方法   完成。

查看thread.sleep()和异步延迟 - Here!!

之间的区别

答案 2 :(得分:0)

解决方案:

作为评论中陈述的Heinzi,您应该只使用RunWorkerCompleted事件。

Here是“如何使用backgroundworker runworkercompleted事件”的一个很好的例子你永远不会“等待”任务/线程完成,但你可以“等待”等待句柄或让线程做其他事情在此期间的东西

  

在您持有该实例的类中   Backgroundworker   您只需附加到已完成的活动即可。

     

使用其中的Thread.Sleep()删除该循环

private void WorkerExample() {
    BackgroundWorker bw = new BackgroundWorker();
    bw.RunWorkerCompleted += OnWorkerCompleted; //listen for that event by attaching a handler
    bw.RunWorkerAsync();
}

//This is the EventHandler
private void OnWorkerCompleted(object sender, RunWorkerCompletedEventArgs runWorkerCompletedEventArgs) {
    //This method is called, when the worker finished his job
}

更多信息:

BackgroundWorker上还有一些更有用的事件。

Backgroundworker events

MSDN provides一个完整的示例如何使用BackgroundWorker。你应该看一下。