防止显示Just-In-Time调试器窗口

时间:2013-06-13 15:09:37

标签: c# .net wpf winforms

我的应用程序是WindowsForms和WPF的混合。

在Main方法中我有:

AppDomain.Currentdomain.UnhandledException += 
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

在CurrentDomain_UnhandledException方法中,我显示一个带有“continue”和“quit”按钮的对话框。当用户单击“退出”按钮时,我关闭对话框并调用Application.Exit(new CancelEventArgs(true))。当用户点击“继续”按钮时,我只需关闭对话框。

现在,当其中一个Wpf表单打开并发生异常时,会出现此对话框,我单击“继续”或“退出”按钮,我得到这个实时调试器窗口,应用程序在两种情况下关闭。如何防止这种情况?

2 个答案:

答案 0 :(得分:1)

您需要使用Application.DispatcherUnhandledException

我们这样使用它:

System.Windows.Application.Current.DispatcherUnhandledException +=
    OnWpfUnhandledException;

而且,您必须设置e.Handled = true

答案 1 :(得分:1)

这不是AppDomain.UnhandledException事件的工作原理。当它被提升时,你的程序已经死了,不能再继续了。调用Application.Exit()不会产生预期的效果。也不应该称之为它,方式太危险了,因为它很容易造成又一次崩溃。

当您的事件处理程序运行时,程序无法继续运行。尽可能少量,只记录异常或显示消息框。您将需要保留e.UnhandledException.ToString(),因为它提供了崩溃原因和堆栈跟踪,这对于诊断崩溃原因非常有价值。

从事件处理程序返回会导致正常的未处理异常处理,您的开发计算机上的JIT调试程序,用户计算机上的Windows错误报告对话框。您需要调用Environment.Exit()以便程序终止。