以编程方式关闭WP7应用程序?

16

请阅读此链接:http://blog.jerrynixon.com/2011/11/mango-sample-exit-application.html - Jerry Nixon
6个回答

28

您始终可以通过在着陆页执行此操作并在单击应用程序的后退按钮时使用以下代码来调用退出:

if (NavigationService.CanGoBack)
{
    while (NavigationService.RemoveBackEntry() != null)
    {
        NavigationService.RemoveBackEntry();
    }
}

这将从堆栈中移除后退条目,如果按下后退按钮,应用程序将关闭而不会发生任何异常。


2
尽管我现在已经晚了将近两年,但我还是会接受这个答案,因为它似乎确实有效。 - Vercas

8
承认已知的解决方案提供“退出”按钮,目前我没有看到实施WP7应用程序中“退出”的强制性原因。
该平台完全能够管理应用程序的关闭。越多的应用程序不提供退出功能,用户就会更快地习惯于不考虑应用程序管理,而是让平台来管理。
用户只需使用开始、返回等导航设备即可。
如果用户想要退出当前应用程序并快速转到其他操作 - 很容易 - 他们只需按下开始键。
.Exit()虽然在xna中可用,但现在也不再需要了。在CTP期间,有一个证书要求游戏必须提供一个退出按钮。这已经不存在了。
非游戏应用程序从未有过实施此功能的需要。
越是讨论这个话题(它确实已经被充分探讨),指示我认为没有必要编写退出的迹象就越多。
还应该提到应用程序证书要求特定的应用程序不应具有未处理的异常。

2
通常建议尽量适应平台而不是与之对抗。用户更容易接受一致性。 - Mick N

7

没有一个真正“好的方法”来做到这一点。这里有一个很好的解释/概述你的选择

简而言之,如果这是一个Silverlight应用程序(不是XNA),它将不受支持。你可以简单地抛出一个未处理的异常,然后应用程序将退出。我不建议这样做,这似乎是一种hack和相当粗糙的方法。

这里有一种使其看起来更漂亮的方法,但归根结底,它仍然会抛出一个异常。我不知道应用程序认证过程是否会查看您是否抛出未处理的异常,但我想这可能是一个问题。


谢谢提供链接!它很有帮助!我决定最终还是移除了“退出”按钮。 :D - Vercas
这完全是错误的。自首次发布以来,您必须使用 NavigationSerice.Back() 命令离开应用程序。如果您不在根目录中,则可以在关闭应用程序时使用它。但其他东西被黑客攻击并不推荐,抱歉。 - goldengel
我认为微软会检查未处理的异常并拒绝具有此类异常的应用程序。 - smohamed

5
最简单的方法是从你的根/主页开始进行模拟。我猜这正是像水果忍者这样有退出按钮的应用程序所做的事情。
if ( NavigationService.CanGoBack )  
{  
    NavigationService.GoBack();  
}  

顺便说一下,上面的代码片段适用于Silverlight应用程序。

这才是真正的答案。我无法相信其他回答会抛出异常或破坏应用程序,并获得4个赞。 - goldengel
它总是在CanGoBack上返回false。 - smohamed
1
它只会按照堆栈条目的顺序进行操作。如果你想要一个退出按钮,那么你必须从堆栈中移除所有的条目。 - Syed Umar Ahmed

4
另一种退出应用程序的方法是调用 Microsoft Xna 框架的 Game 类的 exit 函数。
例如:
Microsoft.Xna.Framework.Game game = new Microsoft.Xna.Framework.Game();
game.Exit();

这是唯一一个对我有效的。 - smohamed
仅适用于XNA,无法在Silverlight应用程序上运行。 - Syed Umar Ahmed

0
 private void exitBUtton_ONclick(object sender, RoutedEventArgs e)
    {
        throw new Exception("ExitAppException");
     }

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