WPF ShowDialog перехватывает исключения во время загрузки окна

Диалоговое окно окна WPF отображается с использованием метода ShowDialog в классе Window, как при нажатии кнопки в главном окне, как это.

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var window = new Window1();
                window.ShowDialog();
            }
            catch (ApplicationException ex)
            {
                MessageBox.Show("I am not shown.");
            }
        }

Окно имеет событие Loaded подписан в xaml следующим образом:

<Window x:Class="Stackoverflow.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Loaded="Window_Loaded">
    <Grid />
</Window>

Исключение генерируется в событии Window_Loaded

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        throw new ApplicationException();
    }

Однако исключение не улавливается ловушкой вокруг вызова ShowDialog, и при этом вызов не возвращается. Исключение проглатывается, и окно все еще отображается .

Почему это происходит и как мне обработать исключение в событии Window_Loaded окна WPF? Должен ли я отлавливать его в обработчике событий и удалять окно вручную?

В WinForms вам нужно вызвать Application.SetUnhandledExceptionMode (UnhandledExceptionMode.ThrowException)

, чтобы исключение могло всплывать через вызовы ShowDialog. Есть ли аналогичный переключатель, который нужно установить в WPF?

12
задан vidstige 15 February 2011 в 14:08
поделиться