Programm beenden in C#

xloouch

Erfahrenes Mitglied
Hallo zusammen

Ich hab ein kleines Problem. Das Forum hab ich schon durchsucht, aber finde nix.

Nun zu der Problembeschreibung:

Habe ein WindowForm gemacht und dann einzelne Menüitems.

Wenn ich jetzt ein Schliessen-Item hinzugefügt habe, will ich auch ein Close machen, damit ich das Programm via diese Schliessen-Items beenden kann. Nur weiss ich nicht wie. Hier mein Code. Vielleicht kann einer von euch mir weiterhelfen:

Code:
private void schliessenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Display a MsgBox asking the user to save changes or abort.
            if (MessageBox.Show("Wollen Sie das Programm beenden?", "My Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                // Cancel the Closing event from closing the form.
                e.Cancel == true;
                // Call method to save file...
            }
        }

Es kommen nun zwei Fehler und ich weiss nicht, was damit anzufangen. (Sorry, bin ein Newbee in diesem Bereich)

Fehler 1:
Only assignment, call, increment, decrement, and new object expressions can be used as a statement

Fehler 2:
'System.EventArgs' does not contain a definition for 'Cancel'

Danke für eure Hilfe im voraus..
 
EventArgs besitzen keine Eigenschaft Cancel. Daher der Fehler.

Nimm entweder:
Application.Exit();
oder
Environment.Exit();
 
Ahh. Ok. Danke für deine Hilfe.

Aber geht nicht auch

Code:
this.Close();

oder ist dies Programmiertechnisch schlecht gewählt?
 
this.Close() würde nur das Aktuelle Form schließen. D.h. wenn irgendwo noch ein Thread oder etwas laufen würde, würde dieser Weiterlaufen. mit Application.Exit() wird wirklich das ganze Programm und alle damit verbundenen Prozesse/Threads beendet.
 
Danke für Eure Antworten.

Dementsprechend ist es zu Bevorzugen, wenn mann Application.Exit() verwendet?

Was jedoch bedeutet dann Enivronment.Exit()?

Ist Environment.Exit() gleich wie Application.Exit() oder wie muss ich mir das vorstellen? Wann verwende ich was?

Aber nebenbei schliesse ich den Thread, da ja alles erklährt wurde.

Danke nochmals
 
Wenn du die Program.cs in deinem Projekt mal ansiehst (ich denke du verwendest VS). Dann wirst du sehen dass deine GUI mittels Application.Run Methode gestartet wird. Die Application.Exit ist sozusagen das Gegenstück dazu. Sie sagt allen Threads, GUIs etc. dass sie sich beenden sollen. Alternativ kann man CancelEventArgs angeben werden welche Abfragt ob evt. ein Form versucht hat das Schließen abzubrechen.

Die Environment.Exit Methode ist die Systemnahere implementierung. Als Parameter kann ein Rückgabewert angegeben werden um Fehlercodes bei der Ausführung an andere Prozesse weiterzugeben.

Die manuelle Version mit dem Close und der Beendung der Threads ist im Prinzip eine selbst erstellte Application.exit. Denn sobald das Hauptfenster beendet wird, ist die Ausführung der Application.Run beendet und er fährt in der Main Methode fort. Sollte jedoch bei einem Close das Form selbst die Aktion abbrechen (Ein Handler auf dem Event Closing welches die CancelEventArgs setzt) wird das Programm weiterlaufen. Die Application.Exit sorgt dafür dass wirklich alles Terminiert wird sofern sie nicht beendet werden.
 

Neue Beiträge

Zurück