C# Приложение WPF продолжает работать после выхода, когда за новым созданным окном следует исключение - PullRequest
0 голосов
/ 12 июля 2020

Возьмем простое приложение WPF с двумя классами Window. MainWindow имеет единственный элемент управления - кнопку, которая создает экземпляр AnotherWindow. Если исключение происходит после создания до того, как основной поток выйдет из области ButtonMethod, тогда приложение останется запущенным после закрытия и исчезновения MainWindow.

Обходной путь для этого - установить свойство Owner нового окна на Экземпляр объекта MainWindow.

Приложение будет продолжать работать даже без генерации исключения, если не будет вызова w.Show() или w.Close() после создания экземпляра AnotherWindow.

Вопросы:

  • Где описано такое поведение потоков окон WPF?

  • Как лучше всего создавать другие windows с учетом возможности исключения: установить окно Owner, вызвать window.Close() в некоторой finally области или что-то еще?

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                ButtonMethod();
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
        }

        private void ButtonMethod()
        {
            Window w = new AnotherWindow();
            // Uncomment the line below to fix freezing at the exit.
            // w.Owner = this;
            throw new Exception("Custom user exception!");
            w.Show();
        }
    }

1 Ответ

0 голосов
/ 12 июля 2020

Чтобы открыть новое окно в wpf, вы используете этот код:

private void Button_Click(object sender, RoutedEventArgs e)
{
    SecondWindow w = new SecondWindow();
    w.Show();
}

И если вы sh закрываете то, в котором находитесь, это:

This.close();

Вам не нужен код

throw new Exception("Custom user exception!");

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...