我的应用程序是WindowsForms和WPF的混合。
在Main方法中我有:
AppDomain.Currentdomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
在CurrentDomain_UnhandledException方法中,我显示一个带有“continue”和“quit”按钮的对话框。当用户单击“退出”按钮时,我关闭对话框并调用Application.Exit(new CancelEventArgs(true))。当用户点击“继续”按钮时,我只需关闭对话框。
现在,当其中一个Wpf表单打开并发生异常时,会出现此对话框,我单击“继续”或“退出”按钮,我得到这个实时调试器窗口,应用程序在两种情况下关闭。如何防止这种情况?
答案 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()以便程序终止。