假设在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只打开一次?
答案 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,需要一个 显式关闭方法调用停止 应用程序。否则, 应用程序继续在运行 背景
答案 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();
}
}
虽然,我不确定这是否也会奏效。你究竟想做什么?