【问题标题】:C# WPF unhandled exception: how to make the most of itC# WPF 未处理异常:如何充分利用它
【发布时间】:2015-11-25 23:29:25
【问题描述】:

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

this.Dispatcher.UnhandledException += Dispatcher_UnhandledException;

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

困住它
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());

我明白了:

所以这不是正确的方法。

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

当我退出时更重要的是

Environment.Exit(-1)

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

感谢您的帮助

【问题讨论】:

  • 您正面临 DivideByZeroException
  • 谢谢,这只是一个例子

标签: c# wpf unhandled-exception


【解决方案1】:

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

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

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

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

base.OnUnhandledException(sender, e);

您当然可以选择将异常标记为已处理,但是如果您只是重写此方法以显示错误,我不会将其视为已处理。

【讨论】:

  • 把我涂成哑巴但是为什么我不能放 base.OnUnhandledException(sender, e);操作说明?? base 没有 OnUnhandledException 成员,也没有快速的操作有帮助......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 2017-04-22
  • 2011-05-06
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
相关资源
最近更新 更多