假设我有两个窗口,一个主窗口和一个测试窗口。然后我这样做:
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var window1 = new TestWindow();
window1.Show();
var timer = new Timer();
timer.Interval = TimeSpan.FromSeconds(3).TotalMilliseconds;
timer.Elapsed += (s, e1) => Application.Current.Dispatcher.BeginInvoke((Action) (() => window1.Close()));
timer.Start();
var window2 = new TestWindow();
window2.Owner = window1;
window2.ShowDialog();
}
3 秒后,两个 TestWindows 都将关闭,但应用程序挂起。知道为什么吗?
已报告此问题:https://github.com/dotnet/wpf/issues/277
显然,当您调用Close()
时,堆栈顶部的窗口(window2
(不会像您期望的那样关闭window1
。
此行为意味着您需要确保以与打开窗口相反的顺序关闭窗口,即在关闭window1
之前调用Close()
onwindow2
:
var window1 = new TestWindow();
window1.Show();
var window2 = new TestWindow();
var timer = new Timer();
timer.Interval = TimeSpan.FromSeconds(3).TotalMilliseconds;
timer.Elapsed += (s, e1) => Application.Current.Dispatcher.BeginInvoke((Action)(() => { window2.Close(); window1.Close(); }));
timer.Start();
window2.Owner = window1;
window2.ShowDialog();