使用递归方法在 backgroundworker 中处理异常
Exception Handling in a backgroundworker with a recursive method
我在 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()}
}
当我 运行 我的代码时,我没有进入工作完成事件。如果递归方法中发生任何异常,我的应用程序将停止。
有谁知道为什么会发生这种情况以及如何防止这种情况?
您的问题应该在 post 中得到回答:
如果您在另一个线程中抛出您未捕获的异常,VS 调试器将在那里中断。这就是为什么当您不附加调试器时它可以工作的原因
我在 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()}
}
当我 运行 我的代码时,我没有进入工作完成事件。如果递归方法中发生任何异常,我的应用程序将停止。 有谁知道为什么会发生这种情况以及如何防止这种情况?
您的问题应该在 post 中得到回答:
如果您在另一个线程中抛出您未捕获的异常,VS 调试器将在那里中断。这就是为什么当您不附加调试器时它可以工作的原因