2010-09-07 173 views
27

是否有可能在Windows Phone 7上以编程方式关闭Silverlight应用程序?Windows Phone 7关闭应用程序

+1

请仔细阅读本:HTTP://博客.jerrynixon.com/2011/11/mango-sample-exit-application.html – 2012-02-20 19:39:33

+0

此问题已解决,下面的帖子显示了代码以安全地退出silverlight应用程序。 – 2012-04-09 15:20:12

+0

为什么不让用户在第一页上按回来,以便应用程序可以自然退出? – onmyway133 2012-11-09 10:50:43

回答

8

Silverlight的简短答案是否。
您不应提供关闭应用程序的方法。关闭应用程序应该是用户的选择,并通过使用后退按钮实现适当的次数。这也是市场需求。

也就是说,如果有未处理的异常,silverlight应用程序将关闭。我看到一些人尝试通过抛出错误处理中显式忽略的自定义错误来创建程序化关闭。这可以工作,但仍然存在市场问题。

XNA应用程序可以明确地呼叫Exit()

+0

马特在这里是正确的 - 从Silverlight你不能,但你可以从XNA。以下链接Peter的博客提供了更多信息。请注意,抛出自定义错误违反了市场策略,并会导致应用被拒绝接受市场。此外,不允许从Silverlight应用程序调用XNA Exit方法。 – 2010-09-07 16:21:49

14

如果您编写XNA游戏,您将有权访问明确的Exit()方法。如果您正在编写传统的Silverlight项目,那么无法以编程方式关闭您的应用程序。另请参阅Peter Torr's Blog entry on Exiting Silverlight Apps in Windows Phone 7。在那里他还提到了抛出一个未处理的异常的选择,这是一种可怕的编程风格。

您可以尝试的选项是使用WP7导航服务以编程方式导航回应用程序。不知道这是否会工作。为什么你需要退出

+0

仅供参考,当您处于应用程序的第一页时,CanGoBack为false。试图回头再抛出一个异常,最终达到你的目标,尽管不是很优雅。 – 2011-10-02 13:02:19

+0

有一种方法可以在Silverlight应用程序中以编程方式关闭您的应用程序,请参阅以下文章 – 2012-04-09 15:19:25

6

这里有一些很好的信息。除此之外..

该平台完全能够管理应用程序的关闭。越多的应用程序不提供退出,更快的用户将习惯于不考虑应用程序管理,并让平台管理它。容易 - - 使用开始,背部等

如果用户希望从当前应用程序的去做些别的事情很快

用户将只是导航他们的设备他们只投中开始。

.Exit(),虽然可用于xna,但实际上不再需要。在CTP期间有一个证书要求,游戏必须提供退出按钮。现在这消失了。

非游戏应用程序从来没有需要实现这一点。

这个话题的讨论越多(它在这个区块的运行真的很好),对我来说指标越多,就不需要编码出口。

更新:对于未处理的异常的那些思想为故意关闭一个应用程序或让关闭该应用程序的一个合适的方式因欠佳的经营状况,我会建议您查看关于这个答案的应用认证要求的意见。 Is there a way to programmatically quit my App? (Windows Phone 7)

11

您可以随时在您的着陆页上使用您的应用程序返回按钮的点击这样的代码调用退出:

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

这将从堆栈中删除回条目,你会按下一个后退按钮它将无任何例外地关闭应用程序。

+0

谢谢。在我的应用程序页面中,像这样1 - > 2 - > 3,但第二页是一个向导,可以让你进入第三页,在这里我拦截后退按钮并手动导航到第1页,跳过第2页。但是由于双向导航服务在手动页面更改后工作我无法退出应用程序返回到操作系统。 – LukeP 2012-01-02 19:29:51

+0

好,我认为你可以回到操作系统。只需在应用程序页面1的负载中使用此代码,并在u从第3页手动到第1页时使用此代码。它将删除所有后退条目存在,并点击后退按钮它会出来。我也在我的应用中完成了这项工作。你只需要在背面按键上出来就是空的导航服务栈。我希望它可以帮助你+1 – 2012-02-08 05:18:43

+1

+1 - 不知道为什么更多的人不使用这种方法。完美的作品,并没有抛出异常... – 2012-02-16 23:36:56

0

我的2个便士,原因退出

1)没有连接INTERENT第一次运行它,它需要在Web服务中创建一个帐户某处运行。

2)您需要为用户强制升级,再次绑定到Web服务时,您可能会发现应用程序中存在错误,或者Web服务发生更改,这意味着用户需要强制升级这一点,你会想通知用户,他们必须升级,然后退出应用程序。

目前在我的应用程序,我被迫采取用户,说“他们”必须退出一个形式,如果他们点击返回他们被迫再次回到这个页面。不大好。

2

添加到Microsoft.Xna.Framework.Game的引用,然后调用:

new Microsoft.Xna.Framework.Game().Exit(); 
+0

为什么你想添加XNA引用?当它是一个银光应用程序 – 2012-04-09 15:20:53

+0

添加引用不会影响应用程序,并且如果您需要彻底退出应用程序,则有一个单线程选项 – 2012-05-21 13:10:57

+0

将此API用于silverlight应用程序会使该应用程序在市场上被拒绝isn '它呢? – Apoorva 2012-07-03 07:54:27

1
private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    while (NavigationService.CanGoBack) 
     NavigationService.RemoveBackEntry(); 
} 

,对我的罚款工作。

0

在Silverlight中,我抛出一个未经处理的异常时,我不得不退出应用程序。我知道这不是处理这个问题的优雅方法,但它仍然是最方便和最简单的解决方案。

我知道,根据指导原则,代码中不应该有任何未处理的异常,但我会写入为什么我要在提交时明确抛出异常请求文档中未处理的异常。

到目前为止这种方法一直工作,从来没有我。

3

这里是另一种解决方案。 如果您有即会显示错误给最终用户一个错误页面,您可以使用

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
    { 
     base.OnBackKeyPress(e); 
     e.Cancel = true; 
    } 

而且你可以指导用户按启动按钮退出应用程序。

0
做到这一点

最简单方法是添加一个引用Microsoft.Xna.Framework.Game,再加入 使用Microsoft.Xna.Framework.GamerServices;命名空间前的。然后,我们有我们的Example.xaml一个按钮Click="quit_button"。输出Example.xaml。CS我们把这个代码我们的页面类中:

private void quit_Click(object sender, EventArgs e) 
     { 
      new Microsoft.Xna.Framework.Game().Exit(); 
      //This will close our app 
     } 
0
var buttonInfo = MessageBox.Show("Are you sure you want to exit?", "Exit", MessageBoxButton.OKCancel); 
     if (buttonInfo == MessageBoxResult.OK) 
     { 
      if (NavigationService.CanGoBack) 
      { 
       while (NavigationService.RemoveBackEntry() != null) 
       { 
         // 
       } 
      } 
      e.Cancel = false; 
     } 
     else 
     { 
      //Stop page from navigating 
      e.Cancel = true; 
     } 
+0

这不会通过认证程序,因为:“应用程序不允许自行退出。”这听起来很愚蠢,但这是微软的政策。 – Olter 2013-10-22 11:17:20

+0

导航到您的解决方案资源管理器中的App.xaml.cs并将静态方法添加到应用程序类 'public static void Exit() {0} {0} {0} {0} App.Current.Terminate(); }' }这样你可以从你的应用程序的任意位置调用它,如下所示 'App.Exit();' – 2013-12-15 04:21:10

1

您可以使用此语句

Application.Current.Terminate(); 
+1

问题是关于windows-phone-7,而不是windows-phone-8。 – Olter 2013-10-23 07:37:59

0

导航关闭应用App.xaml.cs在解决方案资源管理器和 添加静态方法到App

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

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

App.Exit(); 
1

这完美地工作Windows Phone上的7

System.Reflection.Assembly asmb = System.Reflection.Assembly.Load("Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"); 
      asmb = System.Reflection.Assembly.Load("Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553"); 
      Type type = asmb.GetType("Microsoft.Xna.Framework.Game"); 
      object obj = type.GetConstructor(new Type[] { }).Invoke(new object[] { }); 
      type.GetMethod("Exit").Invoke(obj, new object[] { }); 

链接 - source

相关问题