Приложение переходит в неизвестное / заблокированное состояние после обработки UnhandledException - PullRequest
1 голос
/ 25 ноября 2011

В моем App.xaml.cs у меня есть события для обработки DispatcherUnhandledExceptions (поток пользовательского интерфейса) и UnhandledException (поток не пользовательского интерфейса). Когда я генерирую исключение внутри dispatcher.Invoke, диспетчер обрабатывает исключение и обрабатывает его. Я устанавливаю e.Handled в true после регистрации исключения. Теперь странное поведение, если я выбрасываю исключение за пределами диспетчера. Вызывает как регулярное утверждение, управление отправляется обработчику исключений диспетчера, но после обработки метода приложение в основном теряет управление, но я могу сказать, что оно все еще работает, посмотрев на кнопку остановки по сравнению с

еще одна вещь, если для e.handled задано значение false, управление отправляется обработчику исключений потока не-пользовательского интерфейса.

Так что меня озадачивает, почему приложение блокируется после обработки исключения в обработчике диспетчера?

вот мой код

    private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
    {
       // log exception here
        e.Handled = true; 
    } // control is lost after executing this block

    private void App_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        try
        {
            Exception ex = e.ExceptionObject as Exception;                
            // log exception here
        }
        finally
        {
            Environment.Exit(-1);
        }

    }

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

UnhandledException означает, что ваше приложение фактически умерло.Если вы получите это событие, тогда будет слишком поздно что-либо делать, чтобы восстановиться после сценария.Обычно вы используете это событие только для регистрации ошибок в целях отладки и, возможно, пытаетесь очистить некоторые неуправляемые ресурсы.

Следующая статья дает подробное объяснение обработки исключений в WPF.

0 голосов
/ 01 декабря 2011

Похоже, что приложение может возобновить работу, если исключение возникает после события OnStartup, если исключение возникает между ними, исключение перехватывается и обрабатывается, но главное окно никогда не отображается, а отладчик показывает приложение как работает.

самое близкое решение, которое я нашел, это удалить сложную логику из конструктора главного окна, чтобы позволить событию onstartup выполняться и выполнять большую загрузку в моем событии загрузки MainWindow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...