如果所有者窗口以编程方式关闭,则 WPF ShowDialog() 不会返回



假设我有两个窗口,一个主窗口和一个测试窗口。然后我这样做:

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();

最新更新