Frage

Ich habe einen Zustand, in dem ich brauche die Anwendung zu schließen und so nenne ich this.Dispose (), wenn ich einen certian-Flag gesetzt.

Zuerst dachte ich, es war ein Problem Funktionen aufrufen, nachdem ich rufe this.Dispose () und so zog ich den Code das letzte, was genannt werden, aber ich habe immer noch ein „Argument wurde nicht behandelt“ „Parameter ist nicht gültig .“ Auf der Application.Run (neu myApp (.), Zeile

Was mache ich falsch? Habe ich etwas verpasst auf dem Weg? Vielleicht gibt es einen besseren Weg, um die Anwendung zu schließen?

War es hilfreich?

Lösung

Versuchen Application.Exit() mit der Anwendung zu beenden.

Wenn Sie Application.Run(new MyForm()); verwenden, wird eine Nachrichtenschleife auf dem Thread erstellt das Formular Objekt als Hauptformular. Es versucht, Win32-Nachrichten zu liefern, die auf ihre jeweiligen Objekte zur Anwendung kommen. Wenn Sie jedoch Dispose() auf dem Formular-Objekt aufrufen, haben Sie nicht die Nachrichtenschleife noch verlassen. Wenn es versucht, die nächste Nachricht zu Ihrem Formular Objekt zu liefern, schlägt es, da es bereits angeordnet ist und die Ausnahme auslöst. Sie sollten entweder bitten Sie das Formular geschlossen werden (durch Close auf dem Formular aufrufen), die dann das Formular stellen das Ereignis zu verarbeiten und wenn abgeschlossen, danach die Nachrichtenschleife beenden. Der andere Weg (direkter Weg) ist insgesamt die Nachrichtenschleife auf dem Faden herunterzuzufahren von Application.Exit() aufrufen, die alle damit verbundenen Formen werden dazu führen, geschlossen werden.

Andere Tipps

Sie sollten verwenden this.Close () statt this.Dispose () Ihr Hauptformular zu schließen.

Wenn Sie die App sind zu schließen und damit die AppDomain Entladen Sie nicht wirklich brauchen von der AppDomain da alles Dispose () aufrufen wird aus dem Speicher entfernt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top