0

我有一个混合了 WindowsForms 和 WPF 的应用程序。

在主要方法中,我有:

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

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

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

4

2 回答 2

1

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

当您的事件处理程序运行时结束,您的程序无法继续运行。做尽可能少的事情,只记录异常或显示一个消息框。您将希望保留 e.UnhandledException.ToString() ,因为它给出了崩溃原因和堆栈跟踪,对于诊断崩溃原因非常有价值。

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

于 2013-06-13T15:40:39.420 回答
1

您需要使用Application.DispatcherUnhandledException

我们像这样使用它:

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

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

于 2013-06-13T15:25:25.547 回答