我正在使用以下组件:
- 一个库(引发异常)
- 一个测试控制台来测试我的日志记录
- 企业库异常处理应用程序块
- 企业图书馆日志记录应用程序块
我正在使用后台工作人员调用库方法。库会引发异常,但永远不会调用 RunWorkerCompleted 处理程序。
捕获异常的唯一方法是用 try/catch 块包围我的 DoWork 处理程序代码。
是否误解了 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){ }
}