c# - 使用递归方法在后台工作人员中进行异常处理
问题描述
我在 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 catchs。我尝试从已完成的事件中获取异常。
public void Work_Completed(object sender, RunWorkerCompletedEventArgs e)
{
if(e.error != null){Do_Something()}
}
当我运行我的代码时,我没有到达工作完成事件。如果递归方法中发生任何异常,我的应用程序将停止。有谁知道为什么会发生这种情况以及如何防止这种情况发生?
解决方案
您的问题应该在这篇文章中得到回答:https ://stackoverflow.com/a/258664/7337767
如果你在另一个线程中抛出一个你没有捕获的异常,VS 调试器将在那里中断。这就是为什么当您不附加调试器时它可以工作的原因
推荐阅读
- angular - 错误:找不到 e 的组件工厂。你把它添加到@NgModule.entryComponents 了吗?
- unity3d - Unity SceneManager 加载场景,Start / Awake 加载时不运行
- php - 子查询总和的sql查询总和(Laravel)
- swift - 有人可以帮助将 URLSession 从 Swift 转换为 Kotlin
- python - Tkinter:我不能 .insert 或 .get 一个空的条目
- pytorch - 在 PyTorch 中打印每个时期的验证损失
- node.js - 如何解决heroku请求超时错误
- javascript - 单选按钮js打印
- python - 数组的 Elasticsearch 映射
- c# - 如何从另一个类中访问一个字段?