web-dev-qa-db-de.com

Richtiger Weg, um die WPF-GUI-Anwendung zu schließen: GetCurrentProcess (). Kill (), Environment.Exit (0) oder this.Shutdown ()

Mein auf dem GUI-Desktop basierendes WPF 4.0-Programm (C # .Net 4.0) funktioniert mit der SQL Server-Datenbank. Jedes Mal, wenn ich meine Anwendung ausführe, wird über ADO.NET Entity Framework eine Verbindung zu SQL Server hergestellt. Wenn SQL Server nicht erreichbar ist, wird eine Ausnahme ausgelöst und MessageBox mit Benachrichtigung angezeigt.

Jetzt möchte ich, dass nach dem Lesen dieser Nachricht die Anwendung beendet wird. Ich habe drei Möglichkeiten gefunden, dies zu tun:

Process.GetCurrentProcess().Kill();

oder

this.Shutdown(); // Application.Current.Shutdown()

oder

System.Environment.Exit(0);

Sie funktionieren alle einwandfrei und tun das, was ich brauche - schließen Sie die Anwendung und beenden Sie den Anwendungsprozess im Windows Task-Manager.

Ich möchte wissen:

  1. Was ist der Unterschied zwischen ihnen?
  2. Auf welche Weise wird meine Anwendung schneller geschlossen?
  3. Welchen Weg zum Schließen der Anwendung soll ich verwenden?
  4. Ist Application.Current.Shutdown() und this.Shutdown() der gleiche Weg, um die Anwendung zu schließen?

Oder gibt es eine andere, geeignetere Möglichkeit, eine WPF-GUI-Anwendung zu schließen?

Application.Exit() funktioniert bei mir nicht, da ich den Fehler erhalte:

Das Ereignis 'System.Windows.Application.Exit' Kann nur auf der linken Seite von + = oder - = erscheinen

Vielen Dank.

49
Mike B.

Application.Current.Shutdown() ist der richtige Weg, um eine Anwendung zu beenden. Im Allgemeinen, weil Sie die Exit-Ereignisse auslösen, mit denen Sie umgehen können more

Process.GetCurrentProcess().Kill() sollte verwendet werden, wenn Sie die Anwendung beenden möchten. mehr

Ad1. Die Art dieser Methoden ist völlig unterschiedlich. Das Herunterfahren kann angehalten werden, um einige Vorgänge zu beenden und das Schließen der Anwendung zu erzwingen.

Ad2. Wahrscheinlich wird Kill() der schnellste Weg sein, aber das ist so etwas wie eine Kernel-Panik.

Ad3. Herunterfahren, weil es das Abschlussereignis auslöst

Ad4. Das hängt davon ab, was this ist.

Verwenden Sie Application.Current.Shutdown ();

Fügen Sie ShutdownMode = "OnMainWindowClose" in App.xaml hinzu

2
Dark Knight
private void ExitMenu_Click(object sender, RoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }
1
David Fawzy

@Damian Leszczyński - Vashs Antwort deckt ziemlich genau die 4 spezifischen Fragen ab, die Sie gestellt haben. Bei Ihrer letzten Frage zu Application.Exit() handelt es sich um ein Ereignis, das Sie abonnieren können, und nicht um eine Methode, die Sie aufrufen können. Es sollte so verwendet werden:

Application.Current.Exit += CurrentOnExit; 
//this.Exit += CurrentOnExit; would also work if you're in your main application class

...

private void CurrentOnExit(object sender, ExitEventArgs exitEventArgs)
{
    //do some final stuff here before the app shuts down
}
1
HotN