WPF несколько окон, созданных в разных потоках

#wpf #multithreading #window

#wpf #многопоточность #окно

Вопрос:

Я работаю над приложением, в котором есть главное окно и несколько текстовых блоков. Как только пользователь нажимает на текстовый блок, создается новое окно, в котором отображается диаграмма данных, связанная с этим текстовым блоком. Я создаю такую новую диаграмму Wndow в другом потоке, как показано ниже:

   private void xTB_MouseDown(object sender, MouseButtonEventArgs e)
    {
        Thread _displayChartThread = new Thread(() =>
        {
            Window w = new Window()

            w.Closed  = (sender2, e2) =>w.Dispatcher.InvokeShutdown();
            w.Show();

            System.Windows.Threading.Dispatcher.Run();
        });

        _displayChartThread.SetApartmentState(ApartmentState.STA);
        _displayChartThread.IsBackground = true;
        _displayChartThread.Start();
    }
  

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

Есть идеи, как с этим справиться? Я имею в виду, что после закрытия главного окна все окна диаграммы (созданные в разных потоках) также закрываются.

Заранее спасибо.

Комментарии:

1. Вы пытались установить родительский элемент нового созданного окна в главное окно?

Ответ №1:

Вы можете сохранить ссылки на дочерние окна в главном окне. Когда главное окно закрыто, вы можете закрыть все дочерние окна (вызвать CLose с помощью childWindow.Dispatcher )