Cum să eviți excepțiile când se închide un formular, când se apelează un control între fire de execuție, nu pot accesa obiectele eliminate. Când se apelează un formular între fire într-un fir de execuție și când se folosește invoke pentru a atribui valori sau a modifica proprietăți către controalele formularului, dacă firul nu este terminat înainte ca formularul să fie închis, o astfel de excepție va apărea întotdeauna: nu se poate accesa un obiect eliminat. Motivul ar trebui să fie că, atunci când controlul formularului este apelat în thread, formularul a fost delogat, deci iese din toate firele înainte ca formularul să fie delogat. Pentru a rezolva această problemă, poți adăuga următorul cod:
Nu va mai apărea excepția. Apelarea system.environment.exit(0) poate ieși complet din program, indiferent ce fir de discuție este forțat să închidă, încheind programul foarte curat.
Evenimentul FormClosing
Când formularul este închis, apare evenimentul FormClosersing. Acest eveniment este gestionat. Aceasta eliberează toate resursele legate de formular.
Dacă anulați acest eveniment, formularul rămâne deschis.
Când formularul apare ca un dialog de mod, apăsarea pe Închide ascunde formularul și setează proprietatea DialogResult pe Anulare. Prin setarea proprietății DialogResult în unele evenimente, valoarea DialogResult poate fi suprascrisă atunci când utilizatorul apasă butonul de închidere din colțul din dreapta sus.
Eveniment FormClosed
Un eveniment FormClosed apare după ce metoda de închidere sau ieșire a utilizatorului sau a clasei Application închide formularul.
Poți folosi acest eveniment pentru a elibera unele dintre resursele formularului. Poți folosi acest eveniment și pentru a salva unele informații în formularul de intrare sau pentru a actualiza formularul părinte.
|