Come evitare eccezioni quando si chiude un modulo, quando si chiama un controllo tra thread non si può accedere agli oggetti eliminati. Quando si chiama un form tra thread in un thread, e si usa invoke per assegnare valori o modificare proprietà ai controlli del modulo, se il thread non viene terminato prima della chiusura del modulo, apparirà sempre un'eccezione del genere: non si può accedere a un oggetto smaltito. Il motivo dovrebbe essere che quando il controllo form viene chiamato nel thread, il form è stato disconnesso, quindi esce da tutti i thread prima che il form venga disconnesso. Per risolvere questo problema, puoi aggiungere il seguente codice:
Non farà più apparire l'eccezione. Chiamare system.environment.exit(0) può uscire completamente dal programma, indipendentemente dal thread che viene costretto a chiudersi, chiudendo il programma in modo molto pulito.
Evento di chiusura FormInstant
Quando il modulo è chiuso, si verifica l'evento FormChiusura. Questo evento è gestito. Questo libera tutte le risorse relative al modulo.
Se annulli questo evento, il modulo rimane aperto.
Quando il modulo appare come dialogo di modalità, cliccando su Chiudi nasconde il modulo e imposta la proprietà DialogResult su Annulla. Impostando la proprietà DialogResult in alcuni eventi, il valore di DialogResult può essere sovrascritto quando l'utente clicca sul pulsante chiusa in alto a destra.
Evento FormClosed
Un evento FormClosed si verifica dopo che il metodo Chiudi o Uscita della classe utente o Application chiude il modulo.
Puoi usare questo evento per liberare alcune risorse del modulo. Puoi anche usare questo evento per salvare alcune informazioni nel modulo di input o per aggiornare il modulo genitore.
|