如何以编程方式退出或关闭 UWP 应用? (视窗 10)

Posted

技术标签:

【中文标题】如何以编程方式退出或关闭 UWP 应用? (视窗 10)【英文标题】:How to exit or close an UWP app programmatically? (Windows 10) 【发布时间】:2015-12-17 02:42:33 【问题描述】:

我需要它为自己的退出按钮。请告诉我? 我试试这个: this.Close(); //或退出不起作用(

【问题讨论】:

【参考方案1】:

您可以使用CoreApplication 类。它提供了一个static exit method:

public void CloseApp()

    CoreApplication.Exit();

但是,文档说明如下:

注意不要使用此方法在测试或调试场景之外关闭应用程序。

遗憾的是,这背后的原因尚不清楚。


此外,您可以使用老式的Application.Exit 方法(非静态):

public void CloseApp()

    Application.Current.Exit();

这里你也应该看看备注:

使用此方法提供用户界面,使用户能够退出您的应用程序。但是,通常不应提供此 UI,因为系统会自动管理应用程序生命周期并根据需要终止暂停的应用程序以释放资源。

tl;博士: 两种Exit 方法都会终止应用程序,而不是暂停它。你应该问问自己这是否真的是你想做的事情。

【讨论】:

原因是违反用户体验指南以编程方式关闭应用程序 Application.Current.Exit() 可能导致灾难性故障。 如果不支持以编程方式关闭应用程序,则 UX 指南是不充分的。该特定条款将单独拒绝在 Windows 上运行的每个游戏的设计。【参考方案2】:

这是退出 UWP 应用的受支持方式:

Application.Current.Exit();

但是,您应该使用它的情况相对较少。仔细考虑与您将使用此方法的场景相关的 UI 体验。例如,如果某些帐户已过期或远程管理的安全权限被撤销,则以编程方式退出应用程序可能是合理的。很少有您自己的“退出”按钮位于屏幕中间而不违反 Windows 准则。

【讨论】:

“很少有你自己的“退出”按钮位于屏幕中间......” - 这实际上很常见,因为几乎无一例外,每款游戏都有一个退出按钮! 否则您将如何退出仅全屏运行的桌面应用程序? (1) 方法无效。它似乎破坏了主窗口,但调试器告诉我程序仍在运行。 (2) 如果用户没有登录凭据,您还打算对应用程序做什么?你要让屏幕永远坐在那里吗?【参考方案3】:

如果您想暂停应用而不是终止,请尝试使用ApplicationView.TryConsolidateAsync()。例如,如果应用只实现了一个ApplicationView,请尝试调用ApplicationView.GetForCurrentView().TryConsolidateAsync() 来关闭应用。

这种方法的明显好处是应用程序被关闭,就像你在标题栏中按下关闭按钮一样,关闭是优雅的,动画是一样的,应用程序被暂停而不是突然退出。

此外,当您在通过此方法关闭后再次启动应用程序时,应用程序的启动位置和大小与您之前关闭它时相同,而使用 Application.Current.Exit()CoreApplication.Exit() 不会在相同位置启动应用程序,并且大小。

【讨论】:

+1。不知道这个方法。在文档中它说“此方法是一种编程等效于用户为应用程序视图启动关闭手势的程序。”,因此它似乎比其他方法更好。 是的,这是推荐使用的方法。 这很好用。我想知道为什么没有调用 SystemNavigationManagerPreview.GetForCurrentView().CloseRequested 事件。 如果窗口是主窗口,它可能不会调用,如果您手动关闭为什么不在此之前添加您的功能?你能描述一下为什么你需要订阅这个活动吗?? ApplicationView.GetForCurrentView().TryConsolidateAsync() 可以抛出异常 - 找不到元素。

以上是关于如何以编程方式退出或关闭 UWP 应用? (视窗 10)的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式退出 Android 应用程序?

如何以编程方式设置 UWP 应用的方向

Flutter 如何以编程方式退出应用程序

如何以编程方式退出android应用程序

如何以编程方式隐藏UWP应用程序键盘?

如何以编程方式关闭 SearchView?