所以我有一个后台工作人员来完成一项任务,我需要程序在继续之前等待这个任务完成,此时我正在这样做:
while(backgroundwork.IsBusy)
{
Thread.Sleep(10);
}
然而,当我运行这个程序时,程序停止运行,看起来后台工作程序正在不断运行,但事实并非如此,工作程序中没有循环,而且它之前完成了任务。
我能错过什么?
答案 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上还有一些更有用的事件。
MSDN provides一个完整的示例如何使用BackgroundWorker。你应该看一下。