Ich habe eine veröffentlichte Anwendung in C #. Das Problem hierbei ist, dass jedes Mal, wenn ich das Hauptformular durch Klicken auf die rote Schaltfläche zum Beenden schließe, das Formular geschlossen wird, die Anwendung jedoch nicht geschlossen wird. Ich fand dies heraus, als ich versuchte, den Computer herunterzufahren, in der Hoffnung, dass die von mir erstellte Anwendung reibungslos lief, und wurde dann von vielen untergeordneten Fenstern bombardiert, mit denen ich MessageBox
Warnungen erstellt habe.
Ich habe es versucht, Application.Exit
aber es werden immer noch alle untergeordneten Fenster und Warnungen aufgerufen, und ich weiß nicht, wie Environment.Exit
und welche Ganzzahl ich verwenden soll.
Übrigens, wenn meine Formulare das Ereignis formclosed
oder aufrufen, form closing
schließe ich die Anwendung mit einer this.Hide()
Funktion. Hat das Auswirkungen darauf, wie sich meine Anwendung jetzt verhält?
Antworten:
Von MSDN:
Application.Exit
Environment.Exit
Dieser Artikel, Application.Exit vs. Environment.Exit , weist auf einen guten Tipp hin:
Sie können feststellen, ob
System.Windows.Forms.Application.Run
aufgerufen wurde, indem Sie dieSystem.Windows.Forms.Application.MessageLoop
Eigenschaft überprüfen . Wenn true, wurde Run aufgerufen, und Sie können davon ausgehen, dass eine WinForms-Anwendung wie folgt ausgeführt wird.Referenz: Warum funktioniert Application.Exit nicht?
quelle
Application.Exit()
konnte die App nicht beendet werden,Environment.Exit(1)
funktionierte jedoch wie ein Zauber.Environment.Exit(0)
Jeder Wert ungleich Null ist ein anwendungsspezifischer Fehlercode, der von einem Skript verwendet werden kann, um geeignete Maßnahmen zu ergreifen. (Dies ist neuer Code und eine WinForms-Anwendung, daher ist es in diesem Fall unwahrscheinlich, aber für jeden, der Befehlszeilentools schreibt, gut zu wissen.)Environment.Exit
kann auch für die Formularanwendung verwendet werden.return
Aussage würde diesen Ansatz erheblich verbessern. Soweit ich verstanden habe, wird der Code nachApplication.Exit()
einerreturn
Anweisung weiter ausgeführt.Ich weiß, dass dies nicht das Problem ist, das Sie hatten. Ein weiterer Grund dafür könnte sein, dass in Ihrer Anwendung ein Thread ohne Hintergrund offen ist.
Wann
IsBackground
istfalse
wird es Ihr Programm bis in dem Thread abgeschlossen ist offen zu halten, wenn Sie setzenIsBackground
auftrue
das Gewinde wird das Programm nicht offen halten. Dinge wieBackgroundWoker
,ThreadPool
undTask
alle verwenden intern einen Thread mitIsBackground
set totrue
.quelle
Alles was Sie brauchen ist
System.Environment.Exit(1);
Und es verwendet den System-Namespace "using System", der so ziemlich immer vorhanden ist, wenn Sie ein Projekt starten.
quelle
Ich würde eines der folgenden:
für eine Winform oder
für eine Konsolenanwendung (funktioniert auch mit Winforms).
Vielen Dank!
quelle
Kurz gesagt, ja. Die gesamte Anwendung wird beendet, wenn das Hauptformular (das über
Application.Run
dieMain
Methode gestartete Formular ) geschlossen (nicht ausgeblendet) wird.Wenn Ihre gesamte Anwendung immer vollständig beendet werden soll, wenn Ihr Hauptformular geschlossen wird, sollten Sie einfach diesen geschlossenen Handler für Formulare entfernen. Wenn Sie dieses Ereignis nicht abbrechen und es nur schließen lassen, wenn der Benutzer es schließt, erhalten Sie das gewünschte Verhalten. Wenn Sie bei allen anderen Formularen nicht beabsichtigen, dieselbe Instanz des Formulars erneut anzuzeigen, lassen Sie sie einfach schließen, anstatt das Schließen zu verhindern und sie auszublenden. Wenn Sie sie erneut anzeigen, ist es möglicherweise in Ordnung, sie auszublenden.
Wenn Sie möchten, dass der Benutzer auf das "x" für Ihr Hauptformular klickt, aber ein anderes Formular geöffnet bleibt und praktisch das "neue" Hauptformular wird, ist dies etwas komplizierter. In einem solchen Fall müssen Sie nur Ihr Hauptformular ausblenden, anstatt es zu schließen. Sie müssen jedoch einen Mechanismus hinzufügen, der das Hauptformular tatsächlich schließt, wenn Sie wirklich möchten, dass Ihre App endet. Wenn dies die Situation ist, in der Sie sich befinden, müssen Sie Ihrer Frage weitere Details hinzufügen, in denen beschrieben wird, welche Arten von Anwendungen das Programm tatsächlich beenden sollen und welche nicht.
quelle
Machst du:
in deinem Main ()?
Ich fand es eine sehr einfache Möglichkeit, die Anwendung zu beenden, wenn das Formular geschlossen wird.
quelle
quelle
In diesem Fall ist der beste Weg, die Anwendung zu beenden, um die onExit () -Methode in App.xaml.cs zu überschreiben:
quelle