2011-01-13 104 views
0

在这段代码的问题是,当它的运行,我把“是”按钮,这显示:关于产品DispatcherUnhandledException

alt text

这意味着,我的应用程序停止工作,我只是希望它结束。

private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) 
     { 
      string message = "An unhandled exception has ocurred, do you want close the app?"; 
      MessageBoxResult currentMB = MessageBox.Show(message, "SomeTitleApp", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); 

      if (currentMB == MessageBoxResult.Yes) 
      { Application.Current.Shutdown(); } 
      else 
      { e.Handled = true; } 
     } 

回答

2

DispatcherUnhandledException不是正确的。这仅在UI线程炸弹上的代码时才会引发。你可能在工作者线程上或者在应用程序开始前就已经开始了kaboom。

您必须为AppDomain.CurrentDomain.UnhandledException编写一个事件处理程序。调用Environment.Exit()可以停止显示WER对话框。确保记录一些东西,但是没有人关心只是因为某些可追溯的原因而突然闪现的应用程序。记录e.ExceptionObject.ToString()以获取异常消息并记录堆栈跟踪。通常足以诊断问题。

1

MSDN说: 此方法只能从创建Application对象的线程调用。你确定你是从正确的线程调用shutdown吗?

+0

是的,im sure =/ – 2011-01-13 22:07:01

+0

我喜欢韩的回答。为了完整性,我们的所有代码都处理AppDomain UnHandledException和DispatcherUnhandledException。 – Damian 2011-01-13 22:11:41