BackgroundWorker обработка исключений
Я работаю со следующими компонентами:
a Library (which throws an exception) a test-console to test my logging the enterprise library exception handling application blocks the enterprise library logging application blocksЯ вызываю библиотечный метод с использованием фонового работника. Библиотека выдает исключение, но обработчик RunWorkerCompleted никогда не вызывается.
Единственный способ поймать исключение - окружить мой код обработчика DoWork блоком try / catch.
Неужели неправильно понимают свойство RunWorkerCompletedEventArgs.Error? Разве это не для получения исключений, которые были обнаружены BackgroundWorker?
Codesample:
<code>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"); } </code>
Приведенный выше пример приводит к завершению моего консольного приложения. Вывод vs2010 абсолютно ничего не записывает (только вывод по умолчанию).
Так в чем же проблема?
// Редактировать: этот фрагмент работает для перехвата исключения библиотеки.
<code>static void w_DoWork(object sender, DoWorkEventArgs e) { try { MyClass m = new MyClass(); w.result = m.Compute(); }catch(Exception e){ } } </code>