我有一个小型 WinForms 应用程序,它利用 BackgroundWorker 对象来执行长时间运行的操作。
后台操作偶尔会引发异常,通常是当有人打开正在重新创建的文件时。
无论代码是否从 IDE 运行,.NET 都会弹出一个错误对话框,通知用户发生了未处理的异常。使用 Release 配置编译代码也不会改变这一点。
根据MSDN:
如果操作引发了您的代码无法处理的异常,BackgroundWorker 会捕获该异常并将其传递给 RunWorkerCompleted 事件处理程序,在该处理程序中它作为 System.ComponentModel..::.RunWorkerCompletedEventArgs 的 Error 属性公开。如果您在 Visual Studio 调试器下运行,则调试器将在 DoWork 事件处理程序中引发未处理异常的位置中断。
我希望偶尔会抛出这些异常,并希望在 RunWorkerCompleted 事件中而不是在 DoWork 中处理它们。我的代码工作正常,错误在 RunWorkerCompleted 事件中得到了正确处理,但我无法终生弄清楚如何停止抱怨“未处理异常”发生的 .NET 错误对话框。
BackgroundWorker 不应该自动捕获该错误吗?这不是 MSDN 文档所说的吗?我需要做什么来通知 .NET 这个错误正在被处理,同时仍然允许异常传播到 RunWorkerCompletedEventArgs 的 Error 属性中?