Wie man Ausnahmen beim Schließen eines Formulars vermeidet, wenn man eine Kontrolle über Threads hinweg aufruft, kann man nicht auf entsorgte Objekte zugreifen. Beim Aufrufen einer Form über Threads in einem Thread hinweg und beim Verwenden von invoke zur Zuweisung von Werten oder zur Änderung von Eigenschaften an Formsteuerungen, taucht eine Ausnahme wie diese immer auf, wenn der Thread nicht beendet wird, bevor das Formular geschlossen wird: Kein Zugriff auf ein entsorgtes Objekt besteht. Der Grund sollte sein, dass das Formular, wenn die Formularsteuerung im Thread aufgerufen wird, ausgeloggt wurde, sodass es alle Threads verlässt, bevor das Formular ausgeloggt wird. Um dieses Problem zu lösen, können Sie folgenden Code hinzufügen:
wird die Ausnahme nicht mehr angezeigt. Das Aufrufen von system.environment.exit(0 kann das Programm komplett beenden, egal welcher Thread zum Beenden gezwungen wird, und das Programm sehr sauber beenden.
FormClosing Event
Wenn das Formular geschlossen wird, tritt das FormClosenting-Ereignis auf. Dieses Ereignis ist geregelt. Dadurch werden alle Ressourcen frei, die mit dem Formular zusammenhängen.
Wenn Sie diese Veranstaltung absagen, bleibt das Formular offen.
Wenn das Formular als Modus-Dialog erscheint, blendet das Schließen das Formular aus und setzt die Eigenschaft DialogResult auf Cancel. Durch das Setzen der DialogResult-Eigenschaft in einigen Ereignissen kann der Wert des DialogResult überschrieben werden, wenn der Benutzer oben rechts auf den Schließen-Button klickt.
FormClosed-Ereignis
Ein FormClosed-Ereignis tritt auf, nachdem die Close- oder Exit-Methode des Benutzers oder der Anwendungsklasse das Formular geschlossen hat.
Sie können dieses Ereignis nutzen, um einige der Ressourcen des Formulars freizugeben. Sie können dieses Ereignis auch nutzen, um einige Informationen im Eingabeformular zu speichern oder das Elternformular zu aktualisieren.
|