有没有一种编程方法可以退出我的应用程序?(Windows Phone 7)

11

我正在编写一个Windows Phone 7应用程序。我有“致命异常”处理代码,其中我确定应用程序完全崩溃,继续运行毫无意义(我希望永远不会出现这种情况...)。由于我的应用程序除了退出之外别无选择,因此我希望用户能够关闭该应用程序。

但是我注意到,在Windows Phone 7的Silverlight 4 SDK中没有System.Environment.Exit()。是否有其他方法可以以编程方式退出应用程序?


2
可能是Windows Phone 7关闭应用程序的重复问题。 - Matt Lacey
一开始也是这么想的,但是继续阅读后发现问题是关于如何处理应用程序中无法恢复的问题。证书要求建议处理异常并将应用程序保留在原地以供用户控制导航。 - Mick N
请阅读此链接:http://blog.jerrynixon.com/2011/11/mango-sample-exit-application.html - Jerry Nixon
9个回答

9

应用程序证书要求:

5.1.2 应用程序终止

应用程序必须处理由.NET Framework引发的异常,且不得意外终止。在证书过程中,应用程序将被监视以检测意外终止情况。任何意外终止的应用程序均会未能通过认证。在处理异常时,应用程序必须提供一个用户友好的错误消息。您可以展示与应用上下文相关的消息。 应用程序在处理完异常后必须继续运行并保持对用户输入响应。 显示通用或无效的错误消息的应用程序将未能通过认证。

我建议您提供您认为与用户相关的任何信息,然后让用户根据此自行管理设备导航。

虽然有已知解决方案可提供“退出”按钮,但我目前没有充分的理由实现WP7应用程序的“退出”功能。

该平台完全能够管理应用程序的关闭。更多应用程序不提供退出功能,用户就越快习惯于不考虑应用程序管理,并让平台去管理它。用户只需使用“开始”、“返回”等按钮来导航他们的设备。

如果用户想要从当前应用程序快速转到其他操作 - 容易的事情 - 他们只需点击“开始”按钮。

Exit()虽然在XNA中可用,但现在已不再需要。在CTP期间,游戏必须提供一个退出按钮的认证要求已经被取消了。

非游戏应用程序从未需要实现这个功能。

越多地讨论这个话题(它确实在圈子里流传甚广),就越能让我感觉到编写退出功能是没有必要的。


我没有读到规范的那部分,感谢你指出来。我想要做的事情就是明确说明应用程序无法继续运行,并通过按下“开始”硬件按钮来退出用户。谢谢。 - will
我在应用市场上有一个抛出异常以退出的应用程序,但它从未被标记为问题。两个注意事项:1)它明确标记为ExitException,因此当抛出时,其意图是明显的;2)它仅在一种情况下使用,即当用户试图退出应用程序并点击我们的自定义启动屏幕(这是一个页面而不是图像),该屏幕开始了一项动画,否则任何人都无法通过。 - Joel Shea
我刚刚因为抛出自定义的ExitException异常而被拒绝通过认证。尽管帮助文档明确说明在这些情况下应用程序将退出,设置屏幕上有禁用此行为的选项,我的测试人员发表了评论表示退出是可取和有用的,并且用户在第一次打开应用程序时有机会查看帮助文档。我已经回复了拒绝信件,询问重新提交后是否有可能收到技术性的例外,但还没有得到答复。 - Yort
我为我的应用程序申请了技术异常,并获得了批准。我确实需要详细说明该行为是可取的,可以在设置中关闭,并在帮助中进行解释。我还在应用程序第一次退出之前加入了一个一次性提示,解释了该行为以及如何关闭它,以便向用户清楚地说明发生了什么。微软可能对此感到满意吧。 - Yort

4

在解决方案资源管理器中导航到App.xaml.cs,并向App类添加一个静态方法。

public static void Exit()
{
      App.Current.Terminate();
}

这样你就可以在应用程序的任何地方调用它,如下所示

App.Exit();

4

对于 Windows Phone 8,只需调用 App.Current.Terminate();


3
一种“不那么丑陋”(似乎也是唯一的)退出方式在这里进行了概述。呸。

这肯定能用,但有点不太好看。;> 谢谢你指出来。 - will

2

以下是我的做法:

void Exit()
{
    while (NavigationService.BackStack.Any())
        NavigationService.RemoveBackEntry();
    base.OnBackKeyPress(new CancelEventArgs());
}

很抱歉,这个不起作用 :(

你应该使用 NavigationService.GoBack() 而不是模拟返回键按下。 - onmyway133

0

我想你可以让你的应用程序抛出未处理的异常,这时,Windows Phone将自动终止你的应用程序。

至于认证要求,你可以请求例外。这种方法对我来说一直有效。


0

当您尝试编程退出WP7应用程序时,需要牢记应用程序认证要求。Peter Torr有一篇博客文章可以帮助您的方法。最近Paul Jenkins在市场上遇到了MahTweets应用程序的问题,他在这里写了博客

希望对您有所帮助, indyfromoz


0
App.Current.Terminate();

适用于 Windows Phone 8.1 Silverlight 应用程序


-1
App.Current.MainWindow.Close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接