Задать вопрос
@romaro

Как поймать исключение, возникшее в фоновом потоке UI-приложения?

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

Итак, есть обработчик нажатия на кнопку в WPF-приложении:
private void TaskRunButton_Click(object sender, RoutedEventArgs e)
        {
            Task.Run(() => { throw new Exception("This Exception occured in the MainWindow Task.Run() handler"); });
        }


Ожидаю, что исключение будет обработано здесь:
void Dispatcher_UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Dispatcher_UnhandledException", MessageBoxButton.OK, MessageBoxImage.Error);
        }


Потому что в корне приложения есть подписка:
[STAThread]
        public static void Main()
        {
            TaskScheduler.UnobservedTaskException += TaskSheduler_UnobservedTaskException;

            var vm = new MainVM();
            var window = new MainWindow() { DataContext = vm };
            var app = new App();

           app.Run(window);
        }


Почему этого не происходит и как все-таки поймать такое исключение?
  • Вопрос задан
  • 11 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы