In den wenigen Jahren, in denen ich C # (Windows Forms) verwendet habe, habe ich nie WPF verwendet. Aber jetzt liebe ich WPF, aber ich weiß nicht, wie ich meine Anwendung beenden soll, wenn der Benutzer im Menü Datei auf den Menüpunkt Beenden klickt.
Ich habe versucht:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
Unter vielen anderen. Nichts funktioniert.
Application.Current.Shutdown();
Ihre Funktion nicht sofort zurückkehren. Sie müssen auch dafür anrufenreturn;
.Application
ist KEINE statische Klasse. EinApplication.Current
statisches Mitglied zu haben bedeutet nicht, dass es statisch ist. Stattdessen ist es eine normale Klasse, die abgeleitet werden kann.Wenn Sie es wirklich zum Schließen benötigen, können Sie auch Environment.Exit () verwenden. , aber es ist überhaupt nicht anmutig (eher wie das Beenden des Prozesses).
Verwenden Sie es wie folgt:
quelle
Environment.Exit()
benötigt mindestens einen Parameter, einen Exit-Code. VerwendenEnvironment.Exit(0)
Sie diese Option, wenn Sie sich keine Gedanken über den Exit-Code machen.Application.Current.Shutdown();
Application.Current.Shutdown();
meinerClosing
Veranstaltung wurde aufgerufen, als ich einfach meine App sofort herunterfahren wollte. AlsoEnvironment.Exit(0);
war die bessere Wahl.Wie Wuminqi sagte ,
Application.Current.Shutdown();
ist es irreversibel, und ich glaube, es wird normalerweise verwendet, um das Schließen einer Anwendung zu erzwingen, beispielsweise wenn sich ein Benutzer abmeldet oder Windows herunterfährt.Rufen
this.close()
Sie stattdessen in Ihrem Hauptfenster auf. Dies entspricht dem Drücken von Alt+ F4oder der Schaltfläche [x] zum Schließen im Fenster. Dadurch werden alle anderen Fenster geschlossen und aufgerufenApplication.Current.Shutdown();
, solange die Schließaktion nicht abgebrochen wurde. Weitere Informationen finden Sie in der MSDN-Dokumentation zum Schließen eines Fensters .Da dies
this.close()
stornierbar ist, können Sie im Abschlussereignishandler einen Bestätigungsdialog zum Speichern von Änderungen einfügen. Erstellen Sie einfach einen Event-Handler für<Window Closing="...">
und ändern Sie ihne.Cancel
entsprechend. ( Weitere Informationen hierzu finden Sie in der MSDN-Dokumentation .)quelle
Verwenden Sie nach Bedarf eine der folgenden Methoden:
1.
2.
Vor allem Methoden werden
closing event
vonWindow
class aufgerufen und die Ausführung kann irgendwann aufhören (weil Anwendungen normalerweise Dialoge wie "Sind Sie sicher?" Oder " Möchten Sie Daten vor dem Schließen speichern?" Setzen, bevor ein Fenster vollständig geschlossen wird).3. Wenn Sie die Anwendung jedoch ohne Vorwarnung sofort beenden möchten . Verwenden Sie unten
quelle
Dies sollte den Trick tun:
Wenn Sie interessiert sind, finden Sie hier zusätzliches Material, das ich hilfreich fand:
Details zur Anwendung
WPF Application LifeCycle
quelle
So mache ich meine:
Ich rufe nur
Application.Current.ShutDown()
aus dem Hauptanwendungsfenster an, alle anderen Fenster verwendenthis.Close()
. Behandelt in meinem HauptfensterWindow_Closing(...)
diex
Schaltfläche oben rechts . Wenn eine der Methoden einen Fensterschließer erfordert, wirdWindow_Closing(...)
das Ereignis zum Herunterfahren abgerufen, wenn der Benutzer dies bestätigt.Der Grund, den ich tatsächlich
Application.Current.Shutdown()
in meinem Hauptfenster verwende, ist, dass ich festgestellt habe, dass, wenn ein Designfehler gemacht wurde und ich kein übergeordnetes Element eines meiner Fenster in einer Anwendung deklariert habe, dieses Fenster geöffnet wird, ohne vorher angezeigt zu werden Bis zum letzten aktiven Schließen des Fensters bleibt im Hintergrund ein verstecktes Fenster. Die Anwendung wird nicht heruntergefahren. Die einzige Möglichkeit, einen vollständigen Speicherverlust zu verhindern, besteht darin, dass ich in den Task-Manager gehe , um die Anwendung herunterzufahren.Application.Current.Shutdown()
schützt mich vor unbeabsichtigten Designfehlern.Das ist aus meiner persönlichen Erfahrung. Verwenden Sie am Ende das Beste für Ihr Szenario. Dies ist nur eine weitere Information.
quelle
Es sollte keine
Application.ShutDown();
oder.Exit()
Nachricht geben.Application
ist eine statische Klasse. Es bezieht sich nicht auf die aktuelle Anwendung. Sie müssen zur aktuellen Anwendung gelangen und diese dann wie folgt herunterfahren:quelle
Eine andere Möglichkeit, dies zu tun:
Dadurch wird das Beenden Ihrer Anwendung erzwungen. Es funktioniert immer, auch in einer Multithread-Anwendung.
Hinweis: Achten Sie nur darauf, nicht gespeicherte Daten in einem anderen Thread nicht zu verlieren.
quelle
quelle
Versuchen
Für mich
hat nicht funktioniert.
quelle
Hat nach meinem Verständnis
Application.Current.Shutdown()
auch seinen Nachteil.Wenn Sie ein Bestätigungsfenster anzeigen möchten, in dem Benutzer beim Beenden bestätigen können oder nicht,
Application.Current.Shutdown()
ist dies irreversibel.quelle
Application.Current.Shutdown()
.Zusammenfassend gibt es einige Möglichkeiten, dies zu tun.
1) Beenden des Prozesses, der die Finalisierung, Fehlerbehandlung usw. überspringt:
2) Beenden der aktuellen Anwendung, was wahrscheinlich der richtige Weg ist, da die Exit-Ereignisse aufgerufen werden:
oder
(wenn in einer Instanz der App-Klasse geklickt)
3) Aktuelle App schließen (alle Formulare müssen früher geschlossen / ausgefüllt werden):
(wenn in einer Instanz der App-Klasse geklickt)
4) Verlassen der Umgebung, wodurch die App beendet wird:
Vielleicht möchten Sie hier auch mehr über Exit-Status lesen
quelle
Caliburn Mikrogeschmack
quelle
Wenn Sie einen anderen Thread beenden möchten, der das Anwendungsobjekt nicht erstellt hat, verwenden Sie:
quelle
Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
quelle
Aus xaml-Code können Sie einen vordefinierten Systembefehl aufrufen:
Ich denke, das sollte der bevorzugte Weg sein ...
quelle