Así es como lo hago mío:
// Any control that causes the Window.Closing even to trigger.
private void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
// Method to handle the Window.Closing event.
private void Window_Closing(object sender, CancelEventArgs e)
{
var response = MessageBox.Show("Do you really want to exit?", "Exiting...",
MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if (response == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
Application.Current.Shutdown();
}
}
Sólo pido Application.Current.ShutDown()
desde la ventana principal de la aplicación, todas las demás ventanas utilizan this.Close()
. En mi ventana principal, Window_Closing(...)
maneja el botón superior derecho x
. Si alguno de los métodos requiere cerrar la ventana, Window_Closing(...)
toma el evento para cerrar si el usuario lo confirma.
La razón por la que uso de hecho Application.Current.Shutdown()
en mi ventana principal es que he notado que si se cometió un error de diseño y no he declarado uno de mis ventanas en una aplicación, si esa ventana está abierto sin mostrar antes del último cierre de la ventana activa, me queda una ventana oculta ejecutándose en segundo plano. La aplicación no se apagará. La única forma de evitar la pérdida completa de memoria es que vaya al administrador de tareas para cerrar la aplicación. Application.Current.Shutdown()
me protege de defectos de diseño involuntarios.
Eso es de mi experiencia personal. Al final, use lo mejor para su escenario. Esta es solo otra información.
Como señalé, no es raro. En WPF Application es una clase estática. Application.Current es una referencia a su aplicación actualmente en ejecución. – TimothyP
En mi opinión, es un poco raro en el sentido de que esto no es obvio a primera vista, y se aparta lo suficiente de los modelos anteriores para echar a la gente. Tiene perfecto sentido que funcione, por supuesto. –
Ponlo simple: porque si tu última ventana está cerrada con ... this.Close() ... La aplicación se cerrará, siempre que no hayas cambiado el Modo de apagado. – HelloSam