我一直在努力处理后台工作线程中的事件。
我遇到的所有文档都让我相信,当 DoWork 事件处理程序引发异常时,应该在 RunWorkerCompleted 处理程序中处理该异常,并且该异常将在 RunWorkerCompletedEventArgs 的 Error 属性中可用。
这很好,但在调试期间,我总是看到用户代码消息未处理的异常。这让我相信我的方法有问题。
我应该采取什么步骤来解决这个问题?
问候,乔纳森
我一直在努力处理后台工作线程中的事件。
我遇到的所有文档都让我相信,当 DoWork 事件处理程序引发异常时,应该在 RunWorkerCompleted 处理程序中处理该异常,并且该异常将在 RunWorkerCompletedEventArgs 的 Error 属性中可用。
这很好,但在调试期间,我总是看到用户代码消息未处理的异常。这让我相信我的方法有问题。
我应该采取什么步骤来解决这个问题?
问候,乔纳森
System.Diagnostics.DebuggerNonUserCode
我以前见过这种行为,我通过使用属性装饰 DoWork 处理程序来解决它:
[System.Diagnostics.DebuggerNonUserCode]
void bw_DoWork(object sender, DoWorkEventArgs e)
{ ... }
请注意,只有在调试器中运行时才能看到此信息;即使没有该属性,从 shell 运行时也应该如此。
我再次查看了这个,我仍然看不出你需要这样做的任何充分理由。我称其为调试器错误功能。
我以前遇到过这个问题。仅当您不在调试模式下运行时才会设置 e.Error。如果您在 Debug 中运行,则执行会在异常处停止。但是,在非调试模式下运行相同的程序(在 VS Debug -> Start without Debugging 或 Ctrl+F5 中)并且讨厌的异常对话框不会出现,并且 e.Error 将是异常。不知道为什么,但这就是它的工作原理......
你的方法是正确的。只需在消息上按继续并继续。如果有疑问,请在调试会话之外对其进行测试。