关闭WPF应用程序导致Window.Closing事件?

时间:2018-04-23 14:22:58

标签: c# wpf window shutdown

在我的应用程序中,我有主窗口,用户可以从中打开另一个WPF窗口。 当用户关闭主窗口时,我想退出应用程序,所以我写了这段代码:

  private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                if (onClosingAppFlag == true)
                    return;

                string s = "       Exit the application ?" + Environment.NewLine +
                            "(Exit process duration is about 5 seconds)" + Environment.NewLine +
                            "       Are you sure? ";
                MessageBoxResult dres = MessageBox.Show(this, s, "Exit from RTS",
                    MessageBoxButton.YesNo, MessageBoxImage.Question);
                if (dres == MessageBoxResult.No)
                {
                    e.Cancel = true;
                    return;
                }

                onClosingAppFlag = true;
                App.Current.Shutdown();
                OnClosingApp();

            }
            catch (Exception ex)
            {
                string line = "Error, Exeption occuredd at MainWindow.Window_Closing() : " + Environment.NewLine + ex.Message;
                AppWinServices.Singleton.LogFileWrite(line);
            }
        }

但是第二个窗口仍然出现并且正在运行,因为它有一个等待信号的线程。

为了防止这种情况,我添加了代码,用于结束等待Window_Closing事件信号的线程。现在,如果用户关闭第二个窗口,它就可以工作(线程停止等待,然后窗口关闭),但如果需要从主窗口关闭此窗口,则它不起作用,窗口继续等待。

可能Application.Current.Shutdown();不会导致Window.Closing事件? 如果没有,我怎么能在第二个窗口停止等待,换句话说我知道窗口将要关闭?

感谢。

1 个答案:

答案 0 :(得分:0)

致电ShutdownMode或将OnMainWindowClose属性设置为App.xaml.cs中的protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); ShutdownMode = ShutdownMode.OnMainWindowClose; }

IntermediateOutputPath

what's difference between Environment.Exit() and Application.Shutdown()?