我有2脱钩类,A类和B类,这两类相互利用的Mircosoft CAB框架沟通与事件发布和事件订阅DoAction1();发出事件发布,订阅者在后台工作者线程中执行它的处理程序,这里我想要的是'一些代码2'(在调用DoAction1()后执行)的问题仅在后台工作者完成后执行,但这里是DoAction1 ()是异步执行的,并且在classB后台工作者完成工作之前执行'部分代码2'。 如何控制MethodA的执行?线程同步和去耦类
问候
我有2脱钩类,A类和B类,这两类相互利用的Mircosoft CAB框架沟通与事件发布和事件订阅DoAction1();发出事件发布,订阅者在后台工作者线程中执行它的处理程序,这里我想要的是'一些代码2'(在调用DoAction1()后执行)的问题仅在后台工作者完成后执行,但这里是DoAction1 ()是异步执行的,并且在classB后台工作者完成工作之前执行'部分代码2'。 如何控制MethodA的执行?线程同步和去耦类
问候
您可以使用ManualResetEvent这个
public void MethodA()
{
// Some code 1
DoAction1();
//call wait metod: eventWaitHandle.WaitOne
// Some code 2
}
private void bagroudThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//call set method: eventWaitHandle.Set
}
使用信令与等待事件句柄解决这个问题,我只想说在Microsoft .NET推出ManualResetEventSlim的框架4.0这是ManualResetEvent的另一个版本,它针对短暂的等待时间进行了优化,并能够选择进行一定次数的迭代。它还具有更高效的托管实现,并允许通过CancellationToken取消等待。有关更多信息,请参阅Signaling with Event Wait Handles。
您需要阅读以下信息:http://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.100).aspx密切关注**使用IAsyncResult获取WaitHandle .AsyncWaitHandle属性,使用它的WaitOne方法阻止执行,直到WaitHandle被发信号,然后调用EndInvoke。**换句话说,在这种情况下你将无法使用BackgroundWorker。 – 2012-02-08 14:04:08