Peristiwa System.AppDomain.UnhandledException

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Kejadian ini UnhandledException memberikan pemberitahuan tentang pengecualian yang tidak tertangkap. Ini memungkinkan aplikasi untuk mencatat informasi tentang pengecualian sebelum handler default sistem melaporkan pengecualian kepada pengguna dan mengakhiri aplikasi. Jika informasi yang memadai tentang status aplikasi tersedia, tindakan lain dapat dilakukan - seperti menyimpan data program untuk pemulihan nanti. Perhatian disarankan, karena data program dapat rusak ketika pengecualian tidak ditangani.

Kejadian ini dapat ditangani di domain aplikasi apa pun. Namun, peristiwa belum tentu dimunculkan di domain aplikasi tempat pengecualian terjadi. Pengecualian tidak tertangani hanya jika seluruh tumpukan untuk utas telah dibatalkan tanpa menemukan handler pengecualian yang berlaku, sehingga tempat pertama peristiwa dapat dinaikkan berada di domain aplikasi tempat utas berasal.

UnhandledException Jika peristiwa ditangani di domain aplikasi default, peristiwa dinaikkan di sana untuk pengecualian yang tidak tertangani di utas apa pun, apa pun domain aplikasi tempat utas dimulai. Jika utas dimulai di domain aplikasi yang memiliki penanganan aktivitas untuk UnhandledException, peristiwa akan dinaikkan di domain aplikasi tersebut. Jika domain aplikasi tersebut bukan domain aplikasi default, dan ada juga penanganan aktivitas di domain aplikasi default, peristiwa dinaikkan di kedua domain aplikasi.

Misalnya, utas dimulai di domain aplikasi "AD1", memanggil metode di domain aplikasi "AD2", dan dari sana memanggil metode di domain aplikasi "AD3", di mana ia melemparkan pengecualian. Domain aplikasi pertama tempat UnhandledException peristiwa dapat dinaikkan adalah "AD1". Jika domain aplikasi tersebut bukan domain aplikasi default, peristiwa juga dapat dinaikkan di domain aplikasi default.

Catatan

Runtime bahasa umum menangguhkan pembatalihan utas saat penanganan aktivitas untuk UnhandledException acara dijalankan.

Jika penanganan aktivitas memiliki ReliabilityContractAttribute atribut dengan bendera yang sesuai, penanganan aktivitas diperlakukan sebagai wilayah eksekusi yang dibatasi.

Dimulai dengan .NET Framework 4, kejadian ini tidak dimunculkan untuk pengecualian yang merusak status proses, seperti luapan tumpukan atau pelanggaran akses, kecuali penanganan aktivitas sangat penting bagi keamanan dan memiliki HandleProcessCorruptedStateExceptionsAttribute atribut .

Untuk mendaftarkan penanganan aktivitas untuk kejadian ini, Anda harus memiliki izin yang diperlukan, atau dilemparkan SecurityException .

Untuk informasi selengkapnya tentang menangani peristiwa, lihat Menangani dan Meningkatkan Peristiwa.

Peristiwa lain untuk pengecualian yang tidak tertangani

Untuk model aplikasi tertentu, UnhandledException peristiwa dapat didahului oleh peristiwa lain jika pengecualian yang tidak tertangani terjadi di utas aplikasi utama.

Dalam aplikasi yang menggunakan Formulir Windows, pengecualian yang tidak tertangani di utas aplikasi utama menyebabkan Application.ThreadException peristiwa dinaikkan. Jika peristiwa ini ditangani, perilaku defaultnya adalah bahwa pengecualian yang tidak tertangani tidak mengakhiri aplikasi, meskipun aplikasi dibiarkan dalam keadaan tidak diketahui. Dalam hal ini, UnhandledException peristiwa tidak dinaikkan. Perilaku ini dapat diubah dengan menggunakan file konfigurasi aplikasi, atau dengan menggunakan Application.SetUnhandledExceptionMode metode untuk mengubah mode sebelum UnhandledExceptionMode.ThrowExceptionThreadException penanganan aktivitas dikaitkan. Ini hanya berlaku untuk utas aplikasi utama. Peristiwa UnhandledException ini dinaikkan untuk pengecualian yang tidak tertangani yang dilemparkan di utas lain.

Kerangka kerja aplikasi Visual Basic menyediakan peristiwa lain untuk pengecualian yang tidak tertangani di utas aplikasi utama—peristiwa tersebut WindowsFormsApplicationBase.UnhandledException . Kejadian ini memiliki objek argumen peristiwa dengan nama yang sama dengan objek argumen peristiwa yang digunakan oleh AppDomain.UnhandledException, tetapi dengan properti yang berbeda. Secara khusus, objek argumen peristiwa ini memiliki ExitApplication properti yang memungkinkan aplikasi untuk terus berjalan, mengabaikan pengecualian yang tidak tertangani (dan meninggalkan aplikasi dalam keadaan tidak diketahui). Dalam hal ini, AppDomain.UnhandledException peristiwa tidak dinaikkan.