Просто возникла интересная проблема, вызванная следующей последовательностью событий:
Код, вызванный из переопределения WPF OnRender, вызвал исключение (в этом нет ничего загадочного - это просто ошибка в некотором коде модели представления)
Исключение не было обработано, поэтому оно было обработано нашим обработчиком DispatcherUnhandledException.
Обработчик DispatchedUnhandledException пытается открыть окно WPF, чтобы отобразить исключение, разрешить создание отчетов и т. Д. Открытие окна завершается неудачно, вызывая другое исключение (из нашего глобального обработчика исключений), которое завершает работу приложения.
Похоже, что WPF принимает насильственное исключение (!) При попытке открыть новое окно во время выполнения OnRender, и происходят различные плохие вещи, начиная от второго исключения Win32Exception, генерируемого CreateWindowEx глубоко в WPF, до приложения, мгновенно завершающего работу если мы попытаемся сделать что-то вроде MessageBox.Show в нашем обработчике исключений, когда мы обнаружим двойное исключение.
У меня нет особых проблем с решением этой ситуации сегодня, но есть общий вопрос:
Есть ли способ восстановить состояние WPF из обработчика OnRender, чтобы обычные действия WPF могли продолжаться? Я пытался перехватить исключение в OnRender и вызвать dc.Close () перед его сбросом, но, похоже, это не имеет значения. Я полагаю, мне нужно искать вызов WpfState.Reset () или что-то в этом роде.