新窗口后程序不会停止

时间:2011-04-26 14:41:07

标签: c# .net wpf

对于C#,WPF,.NET 4.0来说,这可能是一个愚蠢的问题:

如果我在一个窗口派生类上做了一个新的并且没有在这个窗口上调用ShowDialog,我的程序就不会在关闭时关闭。

示例:

        Window d = new Window();
        //d.ShowDialog();

为什么会这样?

我不想显示窗口,我只是想将此对象用于某些目的。那么我需要做些什么才能让程序在之后关闭呢?

2 个答案:

答案 0 :(得分:7)

您很可能已将应用程序配置为仅在关闭所有窗口时关闭 ,并且通过创建一个永不关闭的新窗口,您的应用程序永远不会关闭。

此设置由Application.ShutdownMode property控制,Shutdown method指定导致Shutdown method被调用的条件。基本上,您有三种选择。

  1. 第一个,正如您遇到的那样,除非并且直到它创建的所有窗口都已关闭,否则不会关闭您的应用程序。无论用户是通过调用Close方法还是以编程方式关闭它们都无关紧要。

    通过将Application.ShutdownMode属性设置为OnLastWindowClose来指定此选项。

  2. 第二种方法利用了这样一个事实,即几乎所有应用程序都有一个“主”窗口(这是您启动应用程序时显示的第一个窗口),并且运行时会自动关闭整个应用程序(以及这个主窗口关闭时所有子窗口。同样,用户是关闭窗口还是通过代码关闭窗口无关紧要。

    通过将Application.ShutdownMode属性设置为OnMainWindowClose来指定此选项。

  3. 第三个选项实质上表示您将手动管理事物。在您通过代码自己调用Stecya's answer之前,它不会关闭应用程序。

    通过将Application.ShutdownMode属性设置为OnExplicitShutdown来指定此选项。

  4. 在这种情况下,我建议您设置第二个选项,并在用户关闭主窗口时让您的应用自动关闭。这将防止任何可能仍然显示的流浪儿童窗口阻止您的应用程序关闭。这消除了编写{{3}}中显示的代码的需要,并让运行时自动为您处理所有这些。

答案 1 :(得分:3)

您可以使用此代码关闭所有窗口

  private void CloseAllWindows()
  {
     foreach(var window in Application.Current.Windows)
        window.Close();
  }