C# 等待后台工作人员
我有两种方法通过使用BackgrounderWorker来做一些工作。若我运行第一个方法,那个么它会在后台做一些工作,第二个方法也是如此。但我想要的是,第二个方法应该等到方法1启动 代码C# 等待后台工作人员,c#,multithreading,backgroundworker,C#,Multithreading,Backgroundworker,我有两种方法通过使用BackgrounderWorker来做一些工作。若我运行第一个方法,那个么它会在后台做一些工作,第二个方法也是如此。但我想要的是,第二个方法应该等到方法1启动 代码 也许在F1中返回IAsyncResult并将其传递给f2中的工作进程,然后在f2工作进程的开头调用AsyncWaitHandle上的waitone 看 @尼基塔-我不是指F1和F2内部的呼叫,原始海报上说他们正在使用后台工作人员。编辑:(查看其他答案)好的-问题是你将如何以及何时等待F1。BackgroundW
也许在F1中返回IAsyncResult并将其传递给f2中的工作进程,然后在f2工作进程的开头调用AsyncWaitHandle上的waitone 看
@尼基塔-我不是指F1和F2内部的呼叫,原始海报上说他们正在使用后台工作人员。编辑:(查看其他答案)好的-问题是你将如何以及何时等待F1。BackgroundWorker已在主线程上执行事件-RunWorkerCompleted。如果您需要在那里执行一些逻辑并等待它完成,那么您不能等待,这将导致死锁。一种选择是使用Application.DoEvents()来启动MSG,但它可能会导致一些意外行为。您可以使用事件对象(或)来同步这些函数的执行。在无信号状态下创建事件,并在
RunSecondWorker()
的DoWork
事件处理程序的开头等待它。将此事件的状态设置为在RunFirstWorker()
的DoWork
事件处理程序的末尾发出信号
在原始代码段中,
Method1()
和Method2()
是GUI回调(在GUI线程上执行的方法),因此您不想阻止它们(您不想在这些方法中的任何一个中等待事件,而是在BackgroundWorker回调-DoWork
事件处理程序中等待事件发生).我可以对-1发表意见吗?从问题和代码来看,代码中的方法1和2、文本中的方法1和方法2以及代码中的第一个和第二个工作人员之间的关系并不明显。。。什么在运行什么,谁在等待谁?
private void Method1(object sender, RoutedEventArgs e)
{
RunFirstWorker();
}
private void Method2(object sender, RoutedEventArgs e)
{
RunFirstWorker();
RunSecondWorker();
}