#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
)