Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Událost UnhandledException poskytuje oznámení o nezachycených výjimkách. Umožňuje aplikaci protokolovat informace o výjimce předtím, než výchozí obslužná rutina systému oznámí výjimku uživateli a ukončí aplikaci. Pokud je k dispozici dostatek informací o stavu aplikace, mohou být provedeny další akce, například ukládání dat programu pro pozdější obnovení. Upozornění se doporučuje, protože data programu se můžou poškodit, když se nezpracují výjimky. Obslužná rutina poběží i nadále, dokud drží zámky, které byly drženy ve chvíli vyvolání výjimky, proto je třeba dbát na to, aby se zabránilo čekání na jiné prostředky, což by mohlo vést k vzájemnému zablokování.
Tuto událost lze zpracovat v jakékoli doméně aplikace. Událost však nemusí být nutně vyvolána v doméně aplikace, kde došlo k výjimce. Výjimka je neošetřená pouze v případě, že byl celý zásobník pro vlákno rozmotán bez nalezení příslušné obslužné rutiny výjimky, takže první místo, kde může být událost vyvolána, je v doméně aplikace, odkud vlákno pochází.
UnhandledException Pokud je událost zpracována ve výchozí doméně aplikace, je vyvolána u jakékoli neošetřené výjimky v jakémkoli vlákně bez ohledu na to, v jaké doméně aplikace vlákno začalo. Pokud vlákno začalo běžet v aplikační doméně, která má obslužnou rutinu událostí pro UnhandledException, událost je vyvolána v této aplikační doméně. Pokud tato doména aplikace není výchozí doménou aplikace a ve výchozí doméně aplikace je také obslužná rutina události, vyvolá se událost v obou doménách aplikace.
Předpokládejme například, že vlákno začíná v doméně aplikace AD1, volá metodu v doméně aplikace AD2 a odtud volá metodu v doméně aplikace AD3, kde vyvolá výjimku. První doménou aplikace, ve které může být událost UnhandledException vyvolána, je „AD1“. Pokud tato doména aplikace není výchozí doménou aplikace, může být událost vyvolána také ve výchozí doméně aplikace.
Poznámka:
Modul Common Language Runtime (CLR) pozastaví přerušení vláken, zatímco se spouští obslužná rutina události UnhandledException.
Pokud obslužná rutina události má ReliabilityContractAttribute atribut s příslušnými příznaky, obslužná rutina události se považuje za omezenou oblast provádění.
Počínaje rozhraním .NET Framework 4 není tato událost vyvolána pro výjimky, které poškodí stav procesu, jako jsou přetečení zásobníku nebo porušení přístupu, pokud obslužná rutina události není kritická pro zabezpečení a nemá HandleProcessCorruptedStateExceptionsAttribute atribut.
Chcete-li zaregistrovat obslužnou rutinu pro událost, musíte mít požadovaná oprávnění, jinak je vyvolán SecurityException.
Další informace o zpracování událostí naleznete v tématu Zpracování a vyvolávání událostí.
Další události týkající se neošetřených výjimek
V některých případech aplikačních modelů může být událost UnhandledException předstižena jinými událostmi, pokud dojde k neošetřené výjimce v hlavním vlákně aplikace.
V aplikacích, které používají model Windows Forms, neošetřené výjimky v hlavním vlákně aplikace způsobí Application.ThreadException vyvolání události. Pokud se tato událost zpracuje, výchozí chování spočívá v tom, že neošetřená výjimka aplikaci neukončí, i když aplikace zůstane v neznámém stavu. V takovém případě se událost UnhandledException nevyvolá. Toto chování lze změnit pomocí konfiguračního souboru aplikace nebo pomocí Application.SetUnhandledExceptionMode metody změnit režim na UnhandledExceptionMode.ThrowException před ThreadException připojení obslužné rutiny události. To platí jenom pro hlavní vlákno aplikace. Událost UnhandledException je vyvolána pro neošetřené výjimky vyvolané v jiných vláknech.
Aplikační architektura jazyka Visual Basic poskytuje další událost pro neošetřené výjimky v hlavním vlákně aplikace – WindowsFormsApplicationBase.UnhandledException událost. Tato událost má objekt argumentů události se stejným názvem jako objekt argumentů události používaný AppDomain.UnhandledExceptionobjektem , ale s různými vlastnostmi. Konkrétně tento objekt argumentů události má ExitApplication vlastnost, která umožňuje aplikaci pokračovat ve spuštění, ignorování neošetřené výjimky (a ponechání aplikace v neznámém stavu). V takovém případě se událost AppDomain.UnhandledException nevyvolá.