【问题标题】:Exception Handling in a backgroundworker with a recursive method具有递归方法的后台工作程序中的异常处理
【发布时间】:2019-09-16 13:12:12
【问题描述】:

我在 Do_Work 方法中有一个带有递归方法的后台工作人员。如果递归方法中发生异常,则我无法捕获该异常。我已经尝试通过 RunWorkerCompleted 事件来获取它,但这也不起作用。

后台工作人员

var worker = new BackgroundWorker();
worker.DoWork += Do_Work;
worker.RunWorkerCompleted += Work_Completed;
worker.WorkerReportsProgress = true;
worker.ProgressChanged += ProgressChanged;
worker.RunWorkerAsync();

Do_Work 方法

public void Do_Work(object sender,DoWorkEventArgs e)
{
    for(int i = 0;i<10;i++)
    {
        RecursiveMethod();
    }
}

我已经尝试在几乎所有内容中都使用 try catch。我尝试从已完成的事件中获取异常。

public void Work_Completed(object sender, RunWorkerCompletedEventArgs e)
{
    if(e.error != null){Do_Something()}
}

当我运行我的代码时,我没有到达工作完成事件。如果递归方法中发生任何异常,我的应用程序将停止。 有谁知道为什么会发生这种情况以及如何防止这种情况发生?

【问题讨论】:

    标签: c# exception backgroundworker


    【解决方案1】:

    你的问题应该在这篇文章中得到回答:https://stackoverflow.com/a/258664/7337767

    如果你在另一个线程中抛出一个你没有捕获的异常,VS 调试器会在那里中断。这就是为什么当您不附加调试器时它可以工作的原因

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-18
      • 1970-01-01
      • 2014-11-18
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多