WPF只能打开一个窗口吗?

Pau*_*aul 2 .net c# wpf

假设在WinForms项目中有两个项目,一个WinForms项目和一个WPF项目,以下代码在Main()中并删除Application.Run没有问题:

        while (true)
        {
            Thread.Sleep(1000);
            Form1 window = new Form1();
            window.Show();
            Thread.Sleep(1000);
            window.Close();
        }
Run Code Online (Sandbox Code Playgroud)

但是,在WPF应用程序中,删除StartupUri ="Window1.xaml",然后创建:

    public App()
    {
        while (true)
        {
            Thread.Sleep(1000);
            Window window = new Window();
            window.Show();
            Thread.Sleep(1000);
            window.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

程序无限循环,但Window只打开一次?

Ray*_*Ray 9

您需要像这样更改ShutdownMode

public App()
{
    this.ShutdownMode = ShutdownMode.OnExplicitShutdown;
    while (true)
    {
        Thread.Sleep(1000);
        Window window = new Window();
        window.Show();
        Thread.Sleep(1000);
        window.Close();
    }
    //Will never get here with this sample code,
    //but this would be how you close the app.
    this.Shutdown();

}
Run Code Online (Sandbox Code Playgroud)

否则,WPF将关闭打开的第一个窗口作为关闭应用程序.虽然循环中的代码将继续运行.

某些应用程序的生命周期可能不依赖于主窗口或最后一个窗口何时关闭,或者根本不依赖于窗口.对于这些场景,您需要将ShutdownMode属性设置为OnExplicitShutdown,这需要显式的Shutdown方法调用来停止应用程序.否则,应用程序将继续在后台运行.

MSDN:ShutdownMode属性