我正在使用以下代码来处理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 propertyRunWorkerCompletedEventArgs.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/

10-09 19:58