防止未处理异常导致的“[您的程序名称]已停止工作”对话框

7
我有一个WinForm应用程序,它依赖于一个外部库,偶尔会在运行线程的上下文之外引发异常。目前情况下,这是完全可以接受的行为(当然除了异常),我们将AppDomain.CurrentDomain.UnhandledException连接起来,以重新启动程序。
唯一的问题是,像下面这样的“[您的程序]已停止工作”对话框出现了: alt text http://telcontar.net/store/archive/CrashGallery/images/crash/vista/2007-05-30%20Microsoft%20Register%20Server.png 是否有一种方法可以完全防止此对话框出现,无论是在AppDomain未处理的异常处理程序中还是在配置设置中,因为没有最终用户会阅读它,并且它只会占用资源直到被点击。

据我所知,该对话框仅在您的应用程序以异常方式终止(例如未处理的异常)时显示。您确定您的未处理异常处理程序在所有情况下都正常工作吗? - rmeador
是的和不是。你说得对,这个对话框是由于未处理的异常引起的,而且确实没有任何异常处理程序来处理它。然而,导致异常的代码位于WCF托管服务中,因此,托管WCF服务的WinForm应用程序最终无法控制异常,除了在AppDomain.CurrentDomain.UnhandledException中注意到它。理想的解决方案是找到并修复所有未处理的异常,但现在我很高兴只记录发生的异常,重新启动APP(从而重新启动WCF服务),而不是让应用程序终止和挂起。 - Serapth
1个回答

5
通过防止UnhandledException事件处理程序退出来避免WER对话框。调用Environment.Exit()来终止应用程序。

2
谢谢,当我需要终止我的应用程序时它有效。但是如果我需要重新启动它该怎么办?我正在使用Application.Restart(),但它显示这个对话框([Your Program]已停止工作)... - Laserson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接