私は2つのデカップリングクラス、クラスAとクラスBを持って、これらの2つのクラスがMircosoft CABフレームワークを使用してイベントの出版とイベントサブスクリプションで互いに通信:スレッドの同期と切り離さクラス
public class ClassA
{
[EventPublication("ActionFired", PublicationScope.WorkItem)]
public event EventHandler<EventArgs> ActionFired;
public void MethodA()
{
// Some code 1
DoAction1();
// Some code 2
}
private void DoAction1()
{
if (ActionFired != null)
ActionFired(this, EventArgs.Empty);
}
}
public class ClassB
{
[EventSubscription("ActionFired")]
public void OnActionFired(object sender, EventArgs e)
{
// Here some background work using BackgroundWorker
}
private void bagroudThread_DoWork(object sender, DoWorkEventArgs e)
{
// work
}
private void bagroudThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
}
ここMethodAで、私たちが呼びますDoAction1();サブスクライバはバックグラウンドワーカースレッドでそのハンドラを実行します。ここで問題となるのは、バックグラウンドワーカーが完了した後でDoAction1()を呼び出した後に実行される 'some code 2'が必要ですが、DoAction1 ()は非同期に実行され、classBバックグラウンドワーカーが作業を完了する前に 'some code 2'が実行されます。 MethodAの実行を制御するにはどうすればよいですか?
よろしく
次の情報を読むことをお勧めします。http://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.100).aspx注意を払う** IAsyncResultを使用してWaitHandleを取得する.AsyncWaitHandleプロパティは、WaitHandleが通知されるまでWaitOneメソッドを使用して実行をブロックし、EndInvoke。**を呼び出します。つまり、このような場合にBackgroundWorkerを使用することはできません。 –