正在等待后台工作人员
本文关键字:工作人员 后台 在等待 | 更新日期: 2023-09-27 17:56:42
我有两个方法可以使用BackgrounderWorker完成一些工作。如果我运行第一种方法,那么它会在后台完成一些工作,第二种方法也是如此。但我想要的是第二种方法应该等到方法一个工作线程启动。
法典
private void Method1(object sender, RoutedEventArgs e)
{
RunFirstWorker();
}
private void Method2(object sender, RoutedEventArgs e)
{
RunFirstWorker();
RunSecondWorker();
}
> 您可以使用事件对象(ManualResetEvent
或AutoResetEvent
)来同步这些函数的执行。创建处于非信号状态的事件,并在RunSecondWorker()
的 DoWork
事件处理程序开始时等待它。将此事件的状态设置为在 RunFirstWorker()
的 DoWork
事件处理程序结束时发出信号。
在您的原始代码片段中,Method1()
和Method2()
是 GUI 回调(在 GUI 线程上执行的方法),因此您不想阻止它们(您不想在任何这些方法本身中等待事件,而是在 BackgroundWorker 回调 - DoWork
事件处理程序中)。
F1 中返回 IAsyncResult 并将其传递给 f2 中的工作线程,然后在 f2 工作线程开始时在 AsyncWaitHandle 上调用 waitone?
请参阅 http://msdn.microsoft.com/en-us/library/system.iasyncresult.aspx
@Nikita - 我的意思不是来自 F1 和 F2 内部的电话,原始海报说他们正在使用后台工作人员。
编辑:(查看其他答案)好的 - 问题是您将如何以及何时等待 F1。BackgroundWorker 具有事件 - RunWorkerComplete,该事件正在主线程上执行。如果你需要在那里做一些逻辑并等待它完成 - 那么你不能等待,这将导致死锁。一种选择是使用 Application.DoEvents() 来增加 msg - 但它可能会导致一些意外行为。