Voici comment je fais le mien :
// 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();
}
}
J'appelle seulement pour Application.Current.ShutDown()
à partir de la fenêtre principale de l'application, toutes les autres fenêtres utilisent la fonction this.Close()
. Dans ma fenêtre principale, Window_Closing(...)
manipule en haut à droite x
bouton. Si l'une des méthodes appelle le rapprochement de la fenêtre, Window_Closing(...)
saisit l'événement pour l'arrêt si l'utilisateur confirme.
La raison pour laquelle j'utilise en fait Application.Current.Shutdown()
dans ma fenêtre principale est que j'ai remarqué que si une erreur de conception a été commise et que je n'ai pas déclaré le parent d'une de mes fenêtres dans une application, si cette fenêtre est ouverte sans être affichée avant la fermeture de la dernière fenêtre active, je me retrouve avec une fenêtre cachée fonctionnant en arrière-plan. L'application ne se fermera pas. La seule façon d'éviter une fuite de mémoire complète est d'aller dans le fichier Gestionnaire des tâches pour fermer l'application. Application.Current.Shutdown()
me protège des défauts de conception involontaires.
C'est mon expérience personnelle. En fin de compte, utilisez ce qui est le mieux pour votre scénario. Ce n'est qu'un élément d'information supplémentaire.