Завершить приложение после необработанного исключения - PullRequest
3 голосов
/ 15 февраля 2010

У меня проблема в приложении 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 сигнализирует о наличии необработанного исключения.

Как я могу избежать нескольких MessageBoxes?
Как я могу избежать сообщения о необработанном исключении?
Как я могу закрыть заявку после исключения?
Как вы можете легко предположить, я хотел бы показать сообщение (но только одно) с моим MessageBox, а затем закрыть приложение без каких-либо других сообщений.

В предыдущем вопросе , связанном с этим аргументом, Кайл Розендо сказал мне использовать DispatcherUnhandledException. Это необходимо или написанного мной кода достаточно?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 15 февраля 2010

Вы также можете использовать Application.Exit() или System.Environment.Exit(exitCode), чтобы немедленно закрыть приложение после того, как вы открыли диалоговое окно с ошибкой.

3 голосов
/ 15 февраля 2010

Вы можете избежать нескольких ящиков сообщений, инициализируя статическое логическое значение firstTime до true и используя код в обработчике исключений:

void MyHandler(object sender, UnhandledExceptionEventArgs e) 
{ 
   if (firstTime){
        Exception exception = e.ExceptionObject as Exception; 
        MessageBox.Show(exception.Message, "ERROR", 
                        MessageBoxButton.OK, MessageBoxImage.Error); 
        firstTime = false;
   }else{
        // Now kill the process....
   }
} 

Чтобы завершить процесс, сделайте это в MyHandler:

System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
proc.Kill();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...