2012-10-24 8 views
41

Im Folgenden sind die Möglichkeiten, mit denen wir eine Anwendung verlassen können:WinForms: Application.Exit vs Enviroment.Exit vs Form.Close

  1. Enviroment.Exit(0)
  2. Application.Exit()
  3. Form.Close()

Was ist der Unterschied zwischen diesen drei Methoden und wann zu verwenden?

+5

Dies ist kein Duplikat Frage. Ich frage nicht, welchen ich verwenden soll, um die Anwendung zu beenden. Ich frage nur nach dem Unterschied zwischen diesen Methoden, da sie ähnliche Operationen durchführt. –

Antwort

75

Die richtige Methode wäre Application.Exit(). Gemäß der Documentation beendet es alle Nachrichtenschleifen und schließt alle Fenster, so dass Ihre Formulare die Möglichkeit haben, ihren Bereinigungscode (in Form.OnClose usw.) auszuführen.

Environment.Exit würde nur den Prozess beenden. Wenn eine Form z.B. ungesicherte Änderungen hat es keine Chance den Benutzer zu fragen, ob er sie speichern möchte. Auch Ressourcen (Datenbankverbindungen usw.) konnten nicht richtig freigegeben werden, Dateien werden möglicherweise nicht gelöscht usw.

Form.Close tut gerade, was es sagt: es schließt ein Formular. Wenn Sie andere Formulare geöffnet haben (möglicherweise nicht jetzt, aber in einer zukünftigen Version Ihrer Anwendung), wird die Anwendung nicht beendet.

Denken Sie daran, dass Application.Exit() Ihre Threads nicht beendet, wenn Sie Multithreading verwenden (und damit die Anwendung im Hintergrund weiterarbeitet, selbst wenn die GUI beendet wird). Daher müssen Sie Maßnahmen ergreifen, um Ihre Threads entweder in der Hauptfunktion (d. H. Program.Main()) oder im Ereignis OnClose Ihres Hauptformulars zu beenden.

+2

+1 für Dokumentationsreferenz –

+3

Sie können die IsBackground-Eigenschaft für Threads festlegen, damit sie den Prozess nicht beenden. –

+1

Was sagen Sie über das Löschen von Dateien wirklich wahr? Wenn ein Prozess beendet wird, sollte das Betriebssystem alle vorhandenen Handles schließen, wodurch auch die Handles gelöscht werden. –

2

sie sind alle in Ordnung. aber form.Close() schließt Ihre Anwendung nicht es schließt das Formular und danach die Main-Methode gibt einen int (exitcode) zurück.

, wenn Sie möchten, dass Ihre Anwendung beendet mit exitcodes Environmet.Exit(exitcode) verwenden oder geben Sie den Exit-Wert in der Haupt-Methode

Verwandte Themen