【问题标题】:Terminate application after unhandled exception在未处理的异常后终止应用程序
【发布时间】:2010-02-15 13:45:31
【问题描述】:

我在 WPF 应用程序中遇到问题。我写了这段代码:

public partial class App : Application
{
    public App()
    {
        AppDomain.CurrentDomain.UnhandledException += new 
            UnhandledExceptionEventHandler(MyHandler);
    }

    void MyHandler(object sender, UnhandledExceptionEventArgs e)
    {
        Exception exception = e.ExceptionObject as Exception;
        MessageBox.Show(exception.Message, "ERROR",
                        MessageBoxButton.OK, MessageBoxImage.Error);
    }

    ...
}

但是当发生未处理的异常时,屏幕上会出现很多 MessageBox(异常发生在定时例程中),并且在关闭其中一个后,Windows 会发出信号表示存在未处理的异常。

如何避免出现多个 MessageBox?
如何避免出现未处理异常的消息?
异常后如何终止应用程序?
正如您很容易想到的那样,我想用我的 MessageBox 显示一条消息(但只有一条),然后在没有任何其他消息的情况下终止应用程序。

在与此论点相关的previous question 中,Kyle Rozendo 告诉我使用 DispatcherUnhandledException。有必要还是我写的代码就够了?

谢谢。

【问题讨论】:

    标签: c# wpf exception-handling


    【解决方案1】:

    您也可以在显示错误对话框后使用Application.Exit()System.Environment.Exit(exitCode) 立即关闭您的应用程序。

    【讨论】:

    • 次要注意.. 如果异常发生在 Application.Run 之前,Application.Exit() 将不起作用
    【解决方案2】:

    您可以通过将静态布尔值 firstTime 初始化为 true 并使用异常处理程序中的代码来避免多个消息框:

    void MyHandler(对象发送者,UnhandledExceptionEventArgs e) { 如果(第一次){ 异常异常 = e.ExceptionObject 作为异常; MessageBox.Show(exception.Message, "ERROR", MessageBoxButton.OK, MessageBoxImage.Error); 第一次 = 假; }别的{ // 现在终止进程.... } }

    要终止进程,请在 MyHandler: 内执行此操作:

    System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess(); proc.Kill();

    【讨论】:

    • DispatcherUnhandledException 呢?也有必要吗?
    • DispatcherUnhandledException 不是必需的。您是否尝试过代码以查看是否有效..因为代码将关闭应用程序...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多