Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF在不同线程中创建多个窗口_Wpf_Multithreading_Window - Fatal编程技术网

WPF在不同线程中创建多个窗口

WPF在不同线程中创建多个窗口,wpf,multithreading,window,Wpf,Multithreading,Window,我在一个有主窗口和一些文本块的应用程序上工作。用户单击文本块后,将创建一个新窗口,并显示与该文本块相关的数据图表。我在不同的线程上创建这样的新图表Wndow,如下所示: private void xTB_MouseDown(object sender, MouseButtonEventArgs e) { Thread _displayChartThread = new Thread(() => { Window w = n

我在一个有主窗口和一些文本块的应用程序上工作。用户单击文本块后,将创建一个新窗口,并显示与该文本块相关的数据图表。我在不同的线程上创建这样的新图表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();
    }
问题是,当您打开多个图表窗口并关闭主窗口时,图表窗口仍处于打开状态,不会被破坏。我可以看到图表窗口不知道主窗口是它们的所有者,并且我无法在创建图表窗口的线程中将它们的所有者属性设置为main window

有没有办法处理这个问题?我的意思是,一旦主窗口关闭,所有图表窗口(在不同线程中创建)也将关闭


提前感谢。

您可以在主窗口中保留对子窗口的引用。当主窗口关闭时,您可以关闭所有子窗口(使用
childWindow.Dispatcher
)调用
close

是否尝试将新创建窗口的父窗口设置为主窗口?