2012-02-08 50 views
1

我有2脱钩类,A类和B类,这两类相互利用的Mircosoft CAB框架沟通与事件发布和事件订阅DoAction1();发出事件发布,订阅者在后台工作者线程中执行它的处理程序,这里我想要的是'一些代码2'(在调用DoAction1()后执行)的问题仅在后台工作者完成后执行,但这里是DoAction1 ()是异步执行的,并且在classB后台工作者完成工作之前执行'部分代码2'。 如何控制MethodA的执行?线程同步和去耦类

问候

+1

您需要阅读以下信息: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

回答

1

您可以使用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 
} 
0

使用信令与等待事件句柄解决这个问题,我只想说在Microsoft .NET推出ManualResetEventSlim的框架4.0这是ManualResetEvent的另一个版本,它针对短暂的等待时间进行了优化,并能够选择进行一定次数的迭代。它还具有更高效的托管实现,并允许通过CancellationToken取消等待。有关更多信息,请参阅Signaling with Event Wait Handles