WPF может открыть только одно окно? - PullRequest
2 голосов
/ 19 марта 2009

Предполагая два проекта, проект WinForms и проект WPF, в проекте WinForms нет проблем с тем, что следующий код находится в 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();
        }
    }

Программа зацикливается бесконечно, но окно открывается только один раз?

Ответы [ 2 ]

8 голосов
/ 19 марта 2009

Вам нужно изменить 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, который требует явный вызов метода Shutdown для остановки приложение. В противном случае приложение продолжает работать в фон.

MSDN: свойство ShutdownMode

0 голосов
/ 19 марта 2009

Традиционно, если вы удаляете StartupUri, вы должны загрузить MainWindow в событии Application.Startup

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();
  }
}

Хотя, я не уверен, что это тоже будет работать. Что именно вы пытаетесь сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...