【发布时间】:2016-07-26 00:44:21
【问题描述】:
我正在开发一个 WPF 应用程序,当主窗口关闭时我需要完全关闭它。还有另外一个窗口可以被我这样打开运行的程序打开(变量名改了,但这里是逻辑):
private void NewWindowButton_Click(object sender, RoutedEventArgs e) {
Thread WindowThread = new Thread(new ThreadStart(NewWindowThread));
WindowThread.SetApartmentState(ApartmentState.STA);
WindowThread.IsBackground = true;
WindowThread.Start();
}
private void NewWindowThread() {
var NewWindow = new NewWindow();
NewWindow.Show();
Dispatcher.Run();
}
当主窗口关闭时,我让关闭事件调用应用程序关闭方法,如下所示:
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
Application.Current.Shutdown();
}
这会关闭在与主窗口相同的线程中创建的所有窗口,但这不会关闭我在新线程中打开的其他窗口。如何确保在主窗口关闭时我的所有窗口都关闭?
编辑:链接的帖子仅部分回答了我的问题。使用函数Environment.Exit(0); 可以关闭每个窗口,但它会导致我的所有窗口在单击 X 按钮后关闭大约 2-3 秒,而 Application.Current.Shutdown(); 会立即关闭窗口但让其他线程保持打开状态。调用 Shutdown 后,同一个线程上没有任何事情发生,因此我不需要在它之后使用 return 语句。
【问题讨论】:
-
我尝试使用
Environment.Exit(0);并且它可以工作,但现在程序需要大约 2-3 秒才能关闭,而不是像使用Application.Current.Shutdown();那样立即发生。 -
让主窗口保持所有打开的子窗口的集合,并在完成关闭顺序时关闭所有子窗口。
-
这可能是我必须做的。当它的窗口关闭时,运行我的单独窗口的新线程会被终止吗?
-
您的代码有效,如果您在 MainWindow 上单击 X,那么所有窗口也会关闭。