我正在使用以下代码来处理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;
}
}
最佳答案
BackgroundWorker
将在DoWork
事件处理程序中handle any unhandled exception。因此,如果只是让错误被抛出(就像已经发生的那样),那么您应该能够通过检查RunWorkerCompleted
property在RunWorkerCompletedEventArgs.Error
事件中获取它(如果未抛出异常,则为null。
我不完全确定为什么要让此错误进入AppDomain.UnhandledException
事件处理程序,但是如果出于某种原因,您的错误处理和日志记录逻辑都存在于AppDomain.UnhandledException
事件的事件处理程序中,我建议您进行一个单独的函数可以完成此工作,您也可以在RunWorkerCompleted
事件中调用它。
if(e.Error != null)
{
ErrorHandler.HandleCriticalError(e.Error);
}
关于c# - The AppDomain.UnhandledException未捕获BackgroundWorker _异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20408807/