2015-03-05 2 views
1

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

У меня изначально появилось диалоговое окно Winforms, и оно работало нормально. Однако я решил обновить его до диалога WPF, чтобы соответствовать всем остальным в приложениях, которые были обновлены до WPF, и это показывает странное поведение.

я первоначально имел

AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf Boom 

и в обработчике (МСГ является сконструированным строка сообщения):

Dim d As New Dlg_Boom(msg) 
    d.ShowDialog() 

    Me.Shutdown() 

Когда я перешел в диалоговое окно WPF, диалоговое окно появляется, но потом я немедленно запустите диалоговое окно окон «Программа перестала работать».

Я также попытался использовать как:

AddHandler Dispatcher.UnhandledException, AddressOf Boom 
    AddHandler Application.DispatcherUnhandledException, AddressOf Boom 

С этим я получаю возможность установить e.Handled = True. Если я оставлю его ложным, я получаю нерабочий диалог, если я установил его в true, он начнет мигать мое диалоговое окно WPF и сразу же закроет его.

Как будто он игнорирует тот факт, что это ShowDialog() и обрабатывает его как Show() и не ждет его возврата. Как ни странно, если я ставлю сообщение непосредственно перед вызовом ShowDialog(), он работает так, как ожидалось, и ждет его возвращения.

Я очень озадачен, у кого есть какие-либо идеи по этому поводу?

+0

Что произойдет, если вы установите точку останова на вызов 'ShowDialog()'? Подождите, пока вы не закроете окно? Исключение исходит из основного потока или фоновой задачи? – vesan

+0

Как заставить его ударить по необработанному коду исключения во время отладки? Каждый раз, когда я пытаюсь, отладчик просто ловит исключение и показывает его мне, не попадая в необработанный код исключения. Если я нажму «Продолжить», он задумается на секунду и вернется к ошибке в отладчике ... Исключение составляет один, который я создал для проверки необработанного кода исключения, и он должен быть в основном потоке. – sfaust

ответ

1

ОК Я не уверен, что это действительно решение, поэтому я не отмечаю его как ответ, но кажется, что он просто не любит диалоговые окна WPF в обработчиках обработанных исключений. Я попытался просто показать пустой диалог WPF, чтобы убедиться, что в моем коде не было ничего странного, и он делает то же самое. Как только я помещаю диалог Winforms, он нормально останавливается в подпрограмме ShowDialog и ждет его возвращения. Когда я вызываю это с WPF, он показывает диалог, но продолжает выполнять код (моя следующая команда выключается), поэтому он просто мигает диалоговым окном и затем уходит. Я также попробовал просто поставить окно сообщения сразу после вызова ShowDialog(), и он помещает диалог и сразу показывает окно сообщения. Как только я убью окно сообщения, он закрывает приложение.

В любом случае, что я закончил делать, это создать диалог WinForms, который просто хранит объект ElementHost и превращает мое диалоговое окно WPF в WPF UserControl. Затем я разместил элемент управления WPF внутри ElementHost. Это похоже на обратную и уродливую, но она работает ...

Если у кого-то есть лучшее предложение использовать чистый WPF, я буду отмечать его как ответ.

Смежные вопросы