Windows Phone 7 cierra la aplicación

¿Hay alguna posibilidad de cerrar programáticamente la aplicación Silverlight en Windows Phone 7?

Si escribe un XNA Game, tendrá acceso a un método Exit () explícito. Si está escribiendo un proyecto Silverlight tradicional, entonces NO , no hay forma de cerrar programáticamente su aplicación. Consulte también la entrada del blog de Peter Torr sobre Salir de aplicaciones Silverlight en Windows Phone 7 . Allí también menciona la opción de lanzar una excepción no controlada, que IMO es un terrible estilo de progtwigción.

Una opción que puede probar es usar el servicio de navegación WP7 para navegar programáticamente desde la aplicación. Sin embargo, no estoy seguro de si eso funcionaría. ¿Por qué necesitas salir ?

Siempre puede llamar a una salida haciendo esto en su página de destino. Use este código al hacer clic en el botón Atrás de su aplicación:

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

Esto eliminará entradas posteriores de la stack y presionará un botón Atrás para cerrar la aplicación sin excepción.

La respuesta corta para Silverlight es No.
No debe proporcionar una forma de cerrar la aplicación. El cierre de la aplicación debe ser la opción del usuario e implementada al usar el botón Atrás el número apropiado de veces. Este es también un requisito del mercado.

Dicho eso, una aplicación Silverlight se cerrará si hay una excepción no controlada. He visto a algunas personas intentar crear un cierre programático arrojando un error personalizado que se ignora explícitamente en el manejo de errores. Esto puede funcionar, pero aún existe el problema del mercado.

Las aplicaciones XNA pueden llamar explícitamente a Exit() .

Alguna buena información aquí ya. Agregando a esto …

La plataforma es completamente capaz de gestionar el cierre de aplicaciones. Cuantas más aplicaciones no proporcionen una salida, los usuarios más rápidos se acostumbrarán a no pensar en el mantenimiento de la aplicación y dejarán que la plataforma lo administre.

El usuario simplemente navegará por su dispositivo usando inicio, retroceso, etc.

Si el usuario quiere salir de la aplicación actual para hacer otra cosa rápidamente, es fácil, solo comienzan.

.Exit (), mientras está disponible para xna, ya no es necesario tampoco. Hubo un requisito de certificación durante CTP que los juegos tenían que proporcionar un botón de salida. Esto ahora se ha ido.

Las aplicaciones que no son juegos nunca tuvieron la necesidad de implementar esto.

Mientras más se discuta este tema (y realmente se ha dado una buena corrida alrededor del bloque), más me indican los indicadores que no es necesario codificar una salida.

Actualización: para aquellos que piensen en una excepción no controlada como una forma adecuada de cerrar una aplicación intencionalmente o dejar que la aplicación se cierre debido a malas condiciones operativas, recomendaría revisar los comentarios sobre los Requisitos de certificación de la aplicación en esta respuesta. ¿Hay alguna manera de cerrar mi aplicación mediante progtwigción? (Windows Phone 7)

Aquí hay otra solución. Si tiene una página de error que muestra un error al usuario final, puede usar

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

Y puede indicarle al usuario que presione el botón de inicio para salir de la aplicación.

Agregue una referencia a Microsoft.Xna.Framework.Game, luego llame a:

 new Microsoft.Xna.Framework.Game().Exit(); 
 private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) { while (NavigationService.CanGoBack) NavigationService.RemoveBackEntry(); } 

Eso funciona para mí bien.

Puede cerrar la aplicación usando esta statement

 Application.Current.Terminate(); 

Esto funcionó perfectamente en 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[] { }); 

Enlace – fuente

Mi valor de 2 peniques, razones para una salida

1) no hay conexión interent la primera vez que se ejecuta y necesita crear una cuenta en un servicio web en algún lugar para ejecutar.

2) Debes forzar una actualización para el usuario; de nuevo, cuando estés vinculado a un servicio web, es posible que descubras un error en tu aplicación o tengas cambios en el servicio web que obliguen al usuario a actualizarse, en ese momento lo harás. desea informar al usuario que debe actualizar y luego salir de la aplicación.

Actualmente, en mi aplicación, me veo obligado a llevar al usuario a un formulario que dice que “ellos” deben salir, y si vuelven a hacer clic, vuelven a ser forzados a regresar a esta página. no muy bueno.

En Silverlight, lanzo una excepción sin manejo cuando tengo que salir de la aplicación. Sé que este no es el método elegante para manejar esto, pero sigue siendo la solución más conveniente y más fácil.

Sé que de acuerdo con las directrices no debería haber excepciones no manejadas en el código, pero escribo por qué estoy lanzando explícitamente una excepción no manejada en el documento de Solicitud de excepción en el momento del envío.

Hasta ahora, este método siempre ha funcionado y nunca me ha fallado.

La forma más sencilla de hacerlo es agregar una referencia a Microsoft.Xna.Framework.Game , luego agregar usando Microsoft.Xna.Framework.GamerServices; antes del espacio de nombres Luego tenemos un botón en nuestro Example.xaml con Click="quit_button" . En Example.xaml.cs ponemos este código dentro de nuestra clase de página:

 private void quit_Click(object sender, EventArgs e) { new Microsoft.Xna.Framework.Game().Exit(); //This will close our app } 
  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; } 

Navegue a App.xaml.cs en su explorador de soluciones y agregue un método estático a la clase de la App

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

para que pueda llamarlo a cualquier lugar desde su aplicación, como se muestra a continuación

 App.Exit();