Я думаю, что этот вопрос состоит из двух частей: как подключить собственный обработчик исключений, чтобы приложение продолжало работу, и можно ли повторно использовать пользовательский интерфейс необработанных исключений Windows Forms.
Первая часть приведена в разделе Application.DispatcherUnhandledException. Если вы подписались на это событие, а ваш обработчик события установил для DispatcherUnhandledExceptionEventArgs.Handled значение true, то WPF пропустит обработку необработанных исключений по умолчанию, т. Е. Приложение не будет автоматически закрываться. (Конечно, ваш обработчик событий все еще может его выключить.) По умолчанию для параметра handled не установлено значение true, поэтому вы должны сделать это явно.
Для второй части см. System.Windows.Forms.ThreadExceptionDialog. Это официально «не предназначено для использования из вашего кода» и не документировано каким-либо полезным способом, поэтому не стоит полагаться на него для производственных приложений. Однако, если вы хотите рискнуть, вы можете создать экземпляр этого класса и ShowDialog () его. В .NET 3.5 он возвращает DialogResult.Cancel, чтобы означать «игнорировать исключение и продолжить», а DialogResult.Abort, чтобы означать «выход». Эти значения не документированы и должны рассматриваться как детали реализации!