调用线程无法访问此对象,因为它属于另一个线程.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();
});
}`
您需要确保从正确的线程访问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线程上的所有窗口。