调用线程无法访问此对象,因为它属于另一个线程.WPF关闭所有窗口

本文关键字:线程 WPF 另一个 窗口 属于 因为 访问 对象 调用 | 更新日期: 2023-09-27 18:06:42

我试图关闭WPF中的所有窗口。这些窗口都是在不同的线程中生成的。

下面是我的函数:
`
private void Button_Click(object sender, RoutedEventArgs e)
{
        this.Dispatcher.Invoke(() =>
    {
        foreach (Window window in Application.Current.Windows)
        {
            if (window == Application.Current.MainWindow)
                window.Close();
        }
        //MessageBox.Show(varWindows.ToString());
        //for (int intCounter = App.Current.Windows.Count; intCounter > 0; intCounter--)
        //    App.Current.Windows[intCounter - 1].Hide();
    });
}`

调用线程无法访问此对象,因为它属于另一个线程.WPF关闭所有窗口

您需要确保从正确的线程访问UI对象。使用应用程序的调度程序,而不是当前窗口的调度程序:

Application.Current.Dispatcher.Invoke(() =>
{
    var a = Application.Current.Windows.Count;
    foreach (Window window in Application.Current.Windows)
    {
        if (window == Application.Current.MainWindow)
        {
            var windowHandle = window;
            window.Dispatcher.Invoke(windowHandle.Close);
        }
    }
});

如果你想关闭主窗口,这将工作,但其他线程的窗口不会在集合中。我强烈建议您使用应用程序的调度程序来打开同一应用程序UI线程上的所有窗口。