C# 等待后台工作人员

C# 等待后台工作人员,c#,multithreading,backgroundworker,C#,Multithreading,Backgroundworker,我有两种方法通过使用BackgrounderWorker来做一些工作。若我运行第一个方法,那个么它会在后台做一些工作,第二个方法也是如此。但我想要的是,第二个方法应该等到方法1启动 代码 也许在F1中返回IAsyncResult并将其传递给f2中的工作进程,然后在f2工作进程的开头调用AsyncWaitHandle上的waitone 看 @尼基塔-我不是指F1和F2内部的呼叫,原始海报上说他们正在使用后台工作人员。编辑:(查看其他答案)好的-问题是你将如何以及何时等待F1。BackgroundW

我有两种方法通过使用BackgrounderWorker来做一些工作。若我运行第一个方法,那个么它会在后台做一些工作,第二个方法也是如此。但我想要的是,第二个方法应该等到方法1启动

代码


也许在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();
}