Πώς μπορείτε να αποφύγετε εξαιρέσεις κατά το κλείσιμο μιας φόρμας όταν η κλήση ενός στοιχείου ελέγχου σε νήματα δεν μπορεί να έχει πρόσβαση σε αντικείμενα που έχουν τοποθετηθεί. Όταν καλείτε μια φόρμα σε νήματα σε ένα νήμα και όταν χρησιμοποιείτε το invoke για να εκχωρήσετε τιμές ή να αλλάξετε ιδιότητες σε στοιχεία ελέγχου φόρμας, εάν το νήμα δεν τερματιστεί πριν από το κλείσιμο της φόρμας, θα εμφανίζεται πάντα μια εξαίρεση όπως αυτή: δεν είναι δυνατή η πρόσβαση σε ένα αντικείμενο που έχει απορριφθεί. Ο λόγος πρέπει να είναι ότι όταν καλείται το στοιχείο ελέγχου φόρμας στο νήμα, η φόρμα έχει αποσυνδεθεί, επομένως εξέρχεται από όλα τα νήματα πριν από την αποσύνδεση της φόρμας. Για να λύσετε αυτό το πρόβλημα, μπορείτε να προσθέσετε τον ακόλουθο κώδικα:
δεν θα εμφανίζεται πλέον η εξαίρεση. Η κλήση του system.environment.exit(0) μπορεί να βγει εντελώς από το πρόγραμμα, ανεξάρτητα από το νήμα που αναγκάζεται να κλείσει, τερματίζοντας το πρόγραμμα πολύ καθαρά.
ΕκδήλωσηFormClosing
Όταν η φόρμα είναι κλειστή, παρουσιάζεται το συμβάν FormCloseting. Αυτό το συμβάν διεκπεραιώνεται. Αυτό απελευθερώνει όλους τους πόρους που σχετίζονται με τη φόρμα.
Εάν ακυρώσετε αυτό το συμβάν, η φόρμα παραμένει ανοιχτή.
Όταν η φόρμα εμφανίζεται ως παράθυρο διαλόγου λειτουργίας, κάνοντας κλικ στο κουμπί Κλείσιμο αποκρύπτεται η φόρμα και ορίζεται η ιδιότητα DialogResult σε Άκυρο. Ορίζοντας την ιδιότητα DialogResult σε ορισμένα συμβάντα, η τιμή του DialogResult μπορεί να παρακαμφθεί όταν ο χρήστης κάνει κλικ στο κουμπί κλεισίματος στην επάνω δεξιά γωνία.
ΕκδήλωσηFormClosed
Ένα συμβάν FormClosed προκύπτει μετά το κλείσιμο της φόρμας από τη μέθοδο κλεισίματος ή εξόδου του χρήστη ή της κλάσης εφαρμογής.
Μπορείτε να χρησιμοποιήσετε αυτό το συμβάν για να αποδεσμεύσετε ορισμένους από τους πόρους της φόρμας. Μπορείτε επίσης να χρησιμοποιήσετε αυτό το συμβάν για να αποθηκεύσετε ορισμένες πληροφορίες στη φόρμα εισαγωγής ή για να ενημερώσετε τη γονική φόρμα.
|