Обработка исключений BackgroundWorker

Я работаю со следующими компонентами:

  • библиотека (, которая генерирует исключение)
  • тестовая -консоль для проверки моей регистрации
  • обработка исключений корпоративной библиотеки блоки приложений
  • блоки приложений регистрации корпоративной библиотеки

Я вызываю библиотечный метод с помощью фонового рабочего процесса. Библиотека генерирует исключение, но обработчик RunWorkerCompleted никогда не вызывается.

Единственный способ перехватить исключение — окружить код обработчика DoWork блоком try/catch.

Вы неправильно поняли свойство RunWorkerCompletedEventArgs.Error? Разве это не для получения исключений, которые были пойманы BackgroundWorker?

Пример кода:

static BackgroundWorker w = new BackgroundWorker();

w.DoWork += new DoWorkEventHandler(w_DoWork);
w.RunWorkerCompleted += 
   new RunWorkerCompletedEventHandler(w_RunWorkerCompleted);
w.RunWorkerAsync();



static void w_DoWork(object sender, DoWorkEventArgs e)
{
   MyClass m  = new MyClass();
   w.result = m.Compute();
}

static void w_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
   if (e.Error != null)
   {
      HandleException(e.Error);
   }

   /* result related code */

}


static void HandleException(Exception e)
{
   ExceptionPolicy.HandleException(e, "MyPolicy");
}

Приведенный выше пример приводит к завершению моего консольного приложения. Вывод vs2010 абсолютно ничего не пишет (только вывод по умолчанию ).

Так в чем проблема?

//Редактировать :этот фрагмент работает для перехвата исключения библиотеки.

static void w_DoWork(object sender, DoWorkEventArgs e)
{
   try
   {
      MyClass m  = new MyClass();
      w.result = m.Compute();
   }catch(Exception e){ }

}
10
задан csteinmueller 24 April 2012 в 14:08
поделиться