C# 后台工作人员可以';无法处理异常

C# 后台工作人员可以';无法处理异常,c#,error-handling,backgroundworker,C#,Error Handling,Backgroundworker,我有一个后台工作人员,当出现问题时会抛出异常。我正在尝试捕获workcompleted事件中的异常。 我的代码大致如下: void workerProcessReports_DoWork(object sender, DoWorkEventArgs e) { try { //Work is here. The code here throws an exception } catch (Exception ex) {

我有一个后台工作人员,当出现问题时会抛出异常。我正在尝试捕获workcompleted事件中的异常。
我的代码大致如下:

void workerProcessReports_DoWork(object sender, DoWorkEventArgs e)
{    
    try
    {
      //Work is here.  The code here throws an exception

    }
    catch (Exception ex)
    {
        throw ex;
    }
}

void workerProcessReports_RunWorkerCompleted(object sender, 
                                             RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
        MessageBox.Show("There was a problem");
    }
    else
    {
        MessageBox.Show("No Problems");                    
    }
}
问题是VisualStudio在dowork方法中的throw ex上中断了消息

用户代码未处理InvalidOperationException


发生什么事了

不要捕获并重新显示相同的异常,这是一种浪费,会导致堆栈跟踪混乱

如果希望在从父异常类型捕获后抛出完全相同的异常,只需编写
throw在您的catch块中。如果你打算把所有的东西都扔出去,一开始就别费心去抓它

如果允许异常发生而不在
doWork
方法中处理它,那么可以在
RunWorkerCompleted
方法中抛出父线程

在RunWorkerCompleted方法中,可以按如下方式抛出它:

if(e.Error != null)
{
    throw e.Error;
}

但是,此时,如果您可以处理它,您可能只想恢复并继续,而不是抛出,因为您已经知道发生了异常。特别是,如果此父线程是您的UI线程,则这是显示错误消息的绝佳机会,而不是因为非致命错误而引发并可能导致应用程序崩溃。

如果Visual Studio调试在中断后继续,会发生什么情况?还是在没有调试的情况下运行?@vesan明白了。这是一个VisualStudio刚刚突破的问题。我可以不用调试就运行,而且工作正常。