Zdarzenie System.AppDomain.UnhandledException
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Zdarzenie UnhandledException zawiera powiadomienie o nieuchwyconych wyjątkach. Umożliwia aplikacji rejestrowanie informacji o wyjątku przed domyślnym programem obsługi systemu zgłasza wyjątek dla użytkownika i kończy działanie aplikacji. Jeśli jest dostępna wystarczająca ilość informacji o stanie aplikacji, mogą zostać podjęte inne akcje , takie jak zapisywanie danych programu na potrzeby późniejszego odzyskiwania. Zaleca się zachowanie ostrożności, ponieważ dane programu mogą stać się uszkodzone, gdy wyjątki nie są obsługiwane.
To zdarzenie można obsłużyć w dowolnej domenie aplikacji. Jednak zdarzenie nie musi być zgłaszane w domenie aplikacji, w której wystąpił wyjątek. Wyjątek jest nieobsługiwany tylko wtedy, gdy cały stos wątku został odłączony bez znalezienia odpowiedniego programu obsługi wyjątków, więc pierwsze miejsce, w którym można podnieść zdarzenie, znajduje się w domenie aplikacji, w której pochodzi wątek.
UnhandledException Jeśli zdarzenie jest obsługiwane w domyślnej domenie aplikacji, jest zgłaszane tam dla nieobsługiwanego wyjątku w dowolnym wątku, niezależnie od domeny aplikacji, w której uruchomiono wątek. Jeśli wątek został uruchomiony w domenie aplikacji, która ma program obsługi zdarzeń dla UnhandledExceptionprogramu , zdarzenie zostanie zgłoszone w tej domenie aplikacji. Jeśli ta domena aplikacji nie jest domyślną domeną aplikacji i istnieje również program obsługi zdarzeń w domyślnej domenie aplikacji, zdarzenie jest zgłaszane w obu domenach aplikacji.
Załóżmy na przykład, że wątek rozpoczyna się w domenie aplikacji "AD1", wywołuje metodę w domenie aplikacji "AD2", a następnie wywołuje metodę w domenie aplikacji "AD3", gdzie zgłasza wyjątek. Pierwsza domena aplikacji, w której UnhandledException można zgłaszać zdarzenie, to "AD1". Jeśli ta domena aplikacji nie jest domyślną domeną aplikacji, zdarzenie można również podnieść w domyślnej domenie aplikacji.
Uwaga
Środowisko uruchomieniowe języka wspólnego zawiesza przerywanie wątków, gdy programy obsługi zdarzeń dla zdarzenia UnhandledException są wykonywane.
Jeśli program obsługi zdarzeń ma ReliabilityContractAttribute atrybut z odpowiednimi flagami, procedura obsługi zdarzeń jest traktowana jako ograniczony region wykonywania.
Począwszy od programu .NET Framework 4, to zdarzenie nie jest zgłaszane w przypadku wyjątków, które uszkodziły stan procesu, takie jak przepełnienia stosu lub naruszenia dostępu, chyba że procedura obsługi zdarzeń ma krytyczne znaczenie dla zabezpieczeń i ma HandleProcessCorruptedStateExceptionsAttribute atrybut .
Aby zarejestrować program obsługi zdarzeń dla tego zdarzenia, musisz mieć wymagane uprawnienia lub SecurityException jest zgłaszany.
Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa i podnoszenie zdarzeń.
Inne zdarzenia dla nieobsługiwane wyjątki
W przypadku niektórych modeli aplikacji zdarzenie może zostać wywłaszczone przez inne zdarzenia, UnhandledException jeśli nieobsługiwany wyjątek występuje w głównym wątku aplikacji.
W aplikacjach korzystających z formularzy Systemu Windows nieobsługiwane wyjątki w głównym wątku aplikacji powodują Application.ThreadException zgłoszenie zdarzenia. Jeśli to zdarzenie jest obsługiwane, domyślne zachowanie polega na tym, że nieobsługiwany wyjątek nie kończy aplikacji, chociaż aplikacja pozostaje w nieznanym stanie. W takim przypadku UnhandledException zdarzenie nie jest zgłaszane. To zachowanie można zmienić przy użyciu pliku konfiguracji aplikacji lub za pomocą Application.SetUnhandledExceptionMode metody , aby zmienić tryb na przed UnhandledExceptionMode.ThrowException podłączeniem ThreadException programu obsługi zdarzeń. Dotyczy to tylko głównego wątku aplikacji. Zdarzenie UnhandledException jest zgłaszane dla nieobsługiwanych wyjątków zgłaszanych w innych wątkach.
Struktura aplikacji języka Visual Basic udostępnia inne zdarzenie dla nieobsługiwane wyjątki w głównym wątku aplikacji — WindowsFormsApplicationBase.UnhandledException zdarzenie. To zdarzenie ma obiekt argumentów zdarzeń o tej samej nazwie co obiekt argumentów zdarzeń używany przez AppDomain.UnhandledException, ale z różnymi właściwościami. W szczególności ten obiekt argumentów zdarzeń ma ExitApplication właściwość, która umożliwia aplikacji kontynuowanie działania, ignorując nieobsługiwany wyjątek (i pozostawiając aplikację w nieznanym stanie). W takim przypadku AppDomain.UnhandledException zdarzenie nie jest zgłaszane.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla