我正在编写我的第一个Windows应用商店应用程序(Windows 8.1),我注意到当我在调试模式下运行它时,我关闭应用程序(通过单击右上角的x,或者从顶部拖动屏幕到底部),它仍然在Visual Studio中运行。我的第一个问题是,这是一个问题吗?这似乎是一个问题。
我从模板开始,我没有对线程做任何事情,目前只有一个页面(MainPage.xaml)。我看过类似的问题,尤其是这个问题: WPF App Doesn't Shut Down When Closing Main Window 但我无法得到他们的建议。
当我将ShutdownMode="OnExplicitShutdown"
添加到我的app.xaml时,我在错误列表中收到了这些错误:
另外我注意到没有指定StartupUri,也不能添加一个(与上面相同的错误。)
另一个建议是在MainWindow.xaml.cs中覆盖OnClosed并在那里关闭应用程序。我没有MainWindow.xaml.cs;我改为使用MainPage.xaml.cs,它没有OnClosed。
Application类的类型为Windows.UI.Xaml.Application
。
如果我在关闭应用程序后暂停VS,则会转到此(生成的)代码:
#if !DISABLE_XAML_GENERATED_MAIN
public static class Program
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
static void Main(string[] args)
{
global::Windows.UI.Xaml.Application.Start((p) => new App()); //<==here
}
}
#endif
谁能告诉我发生了什么?
答案 0 :(得分:4)
这是完全正常的,调试器会告诉你实际发生了什么。所有Modern UI应用程序都以这种方式工作只需使用任务管理器,详细信息选项卡进行检查。观察解雇窗口如何不终止进程,它只是暂停它。
您不仅拥有现代UI,还拥有现代操作系统行为。用户没有足够的信息来判断终止进程是否实际上有用。如果机器有足够的资源,那么没有任何意义。最好保持进程运行,以便当用户再次启动它时,它会立即唤醒。哪个好,用户喜欢。
相反,如果操作系统需要其他进程的资源而且没有足够的资源,那么它将在没有用户帮助的情况下自动终止进程。 Modern UI应用程序的生命周期支持这一点。没有什么特别具有革命性的btw,像Android这样的移动操作系统也可以做到这一点。这些天我使用桌面应用程序的方式,我只是让它们运行。直到我用完任务栏空间,然后清理。烦人的:))
只需单击VS工具栏上的红色按钮即可轻松停止该过程。