在我的主窗体上,我订阅了两个事件:Application.ThreadException 和 Application.Idle。理论上,任何未捕获的异常都应该冒泡到主窗体。但是,如果异常发生在 OnIdle 事件中,则此方法不起作用。系统就崩溃了。有谁知道如何解决这个问题?非常感谢。
我同意不获取 ThreadException 事件并不是很合乎逻辑。然而它确实以这种方式工作,仅当消息循环调度事件并且事件处理程序中存在未处理的异常时才会引发 ThreadException。当存在时,会引发空闲事件没有消息如果要再发送,它会遵循完全不同的代码路径。
您可以通过自己在 Idle 事件处理程序中捕获异常来解决此问题:
void Application_Idle(object sender, EventArgs e) {
try {
// Do stuff
}
catch (Exception ex) {
Application.OnThreadException(ex);
}
}
请注意,如果您让用户决定是退出还是继续程序,那么 ThreadException 是一件喜忧参半的事情。另请注意,它不够通用,无法捕获all如果程序中出现异常,您仍然需要 AppDomain.CurrentDomain.UnhandledException 来处理 UI 线程以外的线程中引发的异常或消息循环开始运行之前引发的异常。
如果您这样做是为了确保用户可以not单击“继续”,然后只需使用 Application.SetUnhandledExceptionMode() 完全禁用 ThreadException 事件。现在一切都通过 AppDomain.UnhandledException 进行。这是更好的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)