So mache ich es bei mir:
// 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();
}
}
Ich fordere nur Application.Current.ShutDown()
aus dem Hauptanwendungsfenster, alle anderen Fenster verwenden this.Close()
. In meinem Hauptfenster, Window_Closing(...)
bedient die rechte obere Ecke x
Taste. Wenn eine der Methoden zum Schließen des Fensters aufruft, Window_Closing(...)
fasst das Ereignis zum Herunterfahren, wenn der Benutzer dies bestätigt.
Der Grund, warum ich in der Tat Application.Current.Shutdown()
in meinem Hauptfenster ist, dass ich festgestellt habe, dass, wenn ein Design-Fehler gemacht wurde und ich kein übergeordnetes Fenster in einer Anwendung deklariert habe, wenn dieses Fenster geöffnet wird, ohne dass es vor dem Schließen des letzten aktiven Fensters angezeigt wird, ich mit einem versteckten Fenster im Hintergrund dastehe. Die Anwendung wird nicht beendet. Die einzige Möglichkeit, ein vollständiges Speicherleck zu verhindern, besteht darin, dass ich in der Aufgaben-Manager um die Anwendung zu beenden. Application.Current.Shutdown()
schützt mich vor unbeabsichtigten Konstruktionsfehlern.
Das ist meine persönliche Erfahrung. Letztendlich müssen Sie das verwenden, was für Ihr Szenario am besten geeignet ist. Dies ist nur ein weiteres Stück Information.