У меня есть 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(); которые загорают публикацию события, абонент выполняет свой обработчик в фоновом рабочем потоке, проблема здесь в том, что я хочу, чтобы «некоторый код 2» (который появился после вызова DoAction1()) выполнялся только после завершения рабочего фона, но здесь DoAction1() выполняется асинхронно, а «некоторый код 2» выполняется до того, как работник фона класса B завершит работу. Как я могу контролировать выполнение MethodA?
С уважением
Вы должны прочитать следующую информацию: http://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.100).aspx обратите внимание на ** Получите WaitHandle, используя IAsyncResult .AsyncWaitHandle, используйте метод WaitOne для блокировки выполнения до тех пор, пока не будет сигнализирован WaitHandle, а затем вызовите EndInvoke. ** Другими словами, вы не сможете использовать BackgroundWorker в таком случае. –