我遇到了一个奇怪的错误,在第一个窗口关闭后,WPF应用程序正在关闭。这让我很好奇是什么触发它关闭
例如,这就是我的工作版本。在EULAWindow关闭之后,它将关闭应用程序。
EULAWindow eula = new EULAWindow();
eula.ShowDialog();
MainMenuWindow mainWindow = new MainMenuWindow();
mainWindow.ShowDialog();
我以为它会打开EULA,然后打开菜单窗口。我发现,如果我重新安排代码,它将按预期运行。
例如,这将解决它:
EULAWindow eula = new EULAWindow();
MainMenuWindow mainWindow = new MainMenuWindow();
eula.ShowDialog();
mainWindow.ShowDialog();
这让我想到了在第一种情况下导致应用程序关闭的实际原因是什么?
答案 0 :(得分:3)
ShowDialog()是一个阻止调用。因此,在第一种情况下,您有单个窗口,然后显示它,然后让用户关闭它。一旦最后一个UI窗口关闭,应用程序应该做什么?也许,按照应用程序关闭代码?我怀疑是这样。
在第二种情况下,在ShowDialog()内部阻塞之前创建两个窗口。因此,一旦你关闭了第一个窗口,就会有另一个窗口可以容纳用户,而应用程序没有关闭,它只是等待下一个窗口显示。
答案 1 :(得分:0)
由于我使用Application Startup来创建我的窗口,因此默认将 EULAWindow 设置为 Current.MainWindow 然后保持 Current.ShutDownMode as ShutdownMode.OnMainWindowClose 。
当您创建两个窗口时,在调用Show或ShowDialog之前,它会自动将关闭模式更改为 ShutdownMode.OnLastWindowClose
我不确定这种情况发生的方式或地点,但我可以说这是进一步调查后发生的行为。