我正在使用以下代码来处理来自BackgroundWorker的异常。问题是异常不支持AppDomain.CurrentDomain.UnhandledException。
App.xaml.cs:
private void Application_Startup(object sender, StartupEventArgs e)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}
我在主应用程序中有一个BackgroundWorker池。每个BackgroundWorker代表一个进度条。 DoWork的实施如下:
private void BackgroundWorker_EditIni(object sender, DoWorkEventArgs e)
{
try
{
throw new Exception("Test");
}
catch (ApplicationException ex)
{
FailureMessage = ex.Message;
e.Cancel = true;
}
catch (Exception)
{
FailureMessage = DialogMessage.InternalError;
e.Cancel = true;
throw;
}
}
答案 0 :(得分:3)
BackgroundWorker
DoWork
事件处理程序中的handle any unhandled exception。因此,如果您只是让错误被抛出(就像您已经存在的那样),那么您应该能够通过选中RunWorkerCompleted
property来获取RunWorkerCompletedEventArgs.Error
事件中的错误(如果没有例外被抛出。
我不完全确定为什么要将此错误转到AppDomain.UnhandledException
事件处理程序,但如果由于某种原因,您的错误处理和日志记录逻辑都存在于{{1}的事件处理程序中我建议创建一个单独的函数来完成那项工作,你也可以在AppDomain.UnhandledException
事件中调用它。
RunWorkerCompleted