Jak uniknąć wyjątków przy zamykaniu formularza podczas wywoływania kontroli przez wątki, które nie mogą uzyskać dostępu do obiektów z likwidacji. Podczas wywoływania formularza między wątkami w wątku oraz przy użyciu invoke do przypisywania wartości lub zmiany właściwości do kontroli formy, jeśli wątek nie zostanie zakończony przed zamknięciem formularza, zawsze pojawi się taki wyjątek: nie można uzyskać dostępu do obiektu usuniętego. Powodem powinno być to, że gdy w wątku wywołana jest kontrola formularza, formularz został wylogowany, więc opuszcza wszystkie wątki zanim formularz zostanie wylogowany. Aby rozwiązać ten problem, możesz dodać następujący kod:
Nie pojawia się już wyjątek. Wywołanie system.environment.exit(0) może całkowicie zakończyć program, niezależnie od wątku, który zostanie wymuszony do zakończenia, kończąc program bardzo czysto.
Wydarzenie zamknięcie formularza
Po zamknięciu formularza następuje zdarzenie FormClosing (Zamykanie formularza). To wydarzenie zostało załatwione. To uwalnia wszystkie zasoby związane z tym formularzem.
Jeśli anulujesz to wydarzenie, formularz pozostaje otwarty.
Gdy formularz pojawi się jako okno dialogowe trybu, kliknięcie Close ukrywa formularz i ustawia właściwość DialogResult na Cancel. Ustawiając właściwość DialogResult w niektórych zdarzeniach, wartość DialogResult może zostać nadpisana po kliknięciu przycisku Close w prawym górnym rogu.
FormClosed event
Zdarzenie FormClosed następuje po zamknięciu formularza metodą Close lub Exit przez użytkownika lub klasę aplikacji.
Możesz użyć tego wydarzenia, aby udostępnić część zasobów formularza. Możesz także użyć tego zdarzenia do zapisania informacji w formularzu wejściowym lub do aktualizacji formularza nadrzędnego.
|