WPF只能打开一个窗口吗?

时间:2009-03-19 20:33:51

标签: c# .net wpf

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

        while (true)
        {
            Thread.Sleep(1000);
            Form1 window = new Form1();
            window.Show();
            Thread.Sleep(1000);
            window.Close();
        }

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

    public App()
    {
        while (true)
        {
            Thread.Sleep(1000);
            Window window = new Window();
            window.Show();
            Thread.Sleep(1000);
            window.Close();
        }
    }

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

2 个答案:

答案 0 :(得分:8)

您需要像这样更改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();

}

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

  

某些应用程序的生命周期可能会   不依赖于什么时候主要   窗口或最后一个窗口关闭,或   可能不依赖于窗户   所有。对于这些场景,您需要   将ShutdownMode属性设置为   OnExplicitShutdown,需要一个   显式关闭方法调用停止   应用程序。否则,   应用程序继续在运行   背景

MSDN:ShutdownMode Property

答案 1 :(得分:0)

传统上,如果删除StartupUri,则应在Application.Startup事件中加载MainWindow

public App() 
{
  Startup += App_Startup
}

public void App_Startup(object sender, StartupEventArgs e)
{
  while (true)
  {
    Thread.Sleep(1000);
    MainWindow = new Window();
    MainWindow.Show();
    Thread.Sleep(1000);
    MainWindow.Close();
  }
}

虽然,我不确定这是否也会奏效。你究竟想做什么?