发生异常时显示表单C#

时间:2010-09-05 19:07:27

标签: c# wpf exception error-handling

我一直在查看Windows API Code Pack 1.1,并且看过一个Error示例并想将它集成到我的Application中,主要的想法是它显示应用程序中是否发生任何错误,而不是任何错误但是我选择了一些。

我该如何编程?

我正在使用WPF

由于

3 个答案:

答案 0 :(得分:3)

在App类的构造函数中添加:

   DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);

然后向App类添加一个方法,类似于以下内容:

void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
    {
        e.Handled = true;
        if (MessageBox.Show("An unexpected error has occurred.  You should exit this program as soon as possible.\n\n" +
                            "Exit the program now?\n\nError details:\n" + e.Exception.Message,
                            "Unexpected error", MessageBoxButton.YesNo) == MessageBoxResult.Yes)

            Shutdown();
    }

答案 1 :(得分:1)

您可以在程序的顶层设置一个catch块,它将显示包含相关错误详细信息的表单。或者您可以使用Application.UnhandledException(假设您使用的是winforms),Application.ThreadException和AppDomain.UnhandledException来捕获未处理的异常。

如果您希望在发生任何异常,处理或不处理时显示消息窗口,那么您将必须在每个catch块中显式编写代码以显示表单,或者使用PostSharp之类的东西编织显示的代码抛出异常时的表单。

答案 2 :(得分:0)

以下内容将捕获所有异常并将其显示在消息框中:

[STAThread]
public static void Main() 
{
  Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
  Application.Run(new Form1());
}

private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) 
{
  // work with exception
  MessageBox.Show(e.Exception.Message);
}

请注意,如果您对线程很重要,可能需要使用线程繁重的应用程序来测试其行为。

更多信息 here