我正在使用以下组件:
- 一个库(会抛出异常)
- 一个测试控制台来测试我的日志记录
- 企业库异常处理应用程序块
- 企业库日志记录应用程序块
我正在使用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){ }
}