C# WPF 未处理的异常:如何充分利用它

C# WPF unhandled exception: how to make the most of it

我对 WPF 很陌生,但发现能够捕获任何未处理的异常真是太棒了。我放了

this.Dispatcher.UnhandledException += Dispatcher_UnhandledException;

在我的 class 的构造函数中。这导致我用

来捕获它
private void Dispatcher_UnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
  e.Handled = true;
  ...
}

起初它不起作用,但后来我发现要让它起作用,我必须 运行 在发行版中和 VS IDE 之外。这样就可以了。

我想要的是尽可能多地获取有关导致异常的原因的信息。可能是异常类型、s/r、行和提供的任何其他内容。

目前正在做

 int a = 0;
 int b = 3 / a;

并通过输入

MessageBox.Show(e.ToString() + "  " + sender.ToString());

我得到:

所以这不是正确的方法。

我知道我没有在问题中提供必要的信息,但我搜索了各种答案,但 none 报告了我需要的信息。如果是这样,在关闭之前保存任何数据可能很有用,但不是关闭而是检测导致异常的原因

当我用

退出时还有什么
Environment.Exit(-1)

我发现该过程仍在 运行ning,这是个问题。 这里 Terminate application after unhandled exception 它说我必须终止我的进程在未处理的异常后关闭我的应用程序真的是正确的方法吗?

感谢您的帮助

导致应用程序崩溃的实际异常包含在 DispatcherUnhandledExceptionEventArgs 参数中。

只需使用 e.Exception 即可获取。

MessageBox.Show(e.Exception.ToString());

显示异常后,我建议通过调用 base 方法允许应用程序继续:

base.OnUnhandledException(sender, e);

您当然可以选择将异常标记为已处理,但是如果您只是简单地覆盖此方法以 显示 错误,我不会将其视为已处理.