首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BackgroundWorker &例外

BackgroundWorker &例外
EN

Stack Overflow用户
提问于 2010-11-25 09:22:13
回答 3查看 1.8K关注 0票数 5

MSDN文档

如果操作引发代码不处理的异常,BackgroundWorker将捕获该异常并将其传递给RunWorkerCompleted事件处理程序,在该事件处理程序中,该异常将作为BackgroundWorker的错误属性公开。

但当我试着

代码语言:javascript
运行
复制
_workers[i].DoWork += (s, args) =>
{
    throw new Exception("Error!");
};

我有异常未处理的错误..。代码似乎不属于RunWorkerCompleted。如何处理错误?

更新

我已经设置了简单的处理程序

代码语言:javascript
运行
复制
_workers[i].DoWork += (s, args) =>
{
    throw new Exception("Error!");
}
...
_workers[i].RunWorkerCompleted += (s, args) =>
{
    if (args.Error != null) {
        string dummy = args.Error.Message;
    }
    ...
};

代码永远不会离开DoWork

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-25 10:33:13

如果抛出异常并通过用户帧,但用户代码没有捕获异常,则该异常被视为“用户未处理”。

所以我认为有三种可能性:

  • 这是一个第一次例外 -所以如果按下F5,异常就会正常传播。
  • 单击“异常助理”中的“编辑代码”。然后做一些编辑,并继续解决问题。
  • 转到Debug->Exception并取消选择“用户未处理”列。
票数 3
EN

Stack Overflow用户

发布于 2012-02-29 04:49:28

如果您正在通过调试器运行,Visual将停止BackgroundWorker.DoWork事件处理程序中的异常,而不是将异常悄悄传递给RunWorkerCompleted事件,这是在调试器中不存在时所发生的情况。

1)只需点击F5并继续执行以跟踪异常(如RoadWarrior所述)

2)如果这太烦人了,因为DoWork不使用委托/lambda,而是使用命名方法并使用[DebuggerStepThrough]属性来修饰。这将使调试器忽略该方法,而不会在异常情况下停止,这样您就可以查看背景工作者的“正常”行为。

请参阅:Visual 2008调试-跳过代码

票数 2
EN

Stack Overflow用户

发布于 2010-11-25 10:14:03

我昨天在BackgroundWorker中做了异常处理。我没有在工人的DoWork处理程序中添加任何附加项。如果发生异常,您将能够在RunWorkerCompleted中获得它,而无需抛出它。只是别忘了,如果出现异常,就取消你的员工。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4275436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档