Bagikan melalui


Sistem.AppDomain.UnhandledException event

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

Peristiwa 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. Pengendali juga akan berjalan sambil memegang kunci yang sudah dipegang ketika pengecualian dilemparkan, jadi diperlukan kehati-hatian untuk menghindari menunggu sumber daya lain yang dapat menyebabkan kebuntuan.

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 diurai tanpa menemukan penangan pengecualian yang sesuai, sehingga tempat pertama peristiwa dapat dilaporkan berada di domain aplikasi tempat utas berasal.

Jika peristiwa UnhandledException ditangani di domain aplikasi default, maka peristiwa tersebut diluncurkan di sana untuk setiap pengecualian yang tidak tertangani di utas mana pun, tanpa peduli domain aplikasi tempat utas tersebut 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 merupakan domain aplikasi default, dan ada juga penanganan peristiwa di domain aplikasi default, peristiwa tersebut dijalankan 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 di mana peristiwa UnhandledException dapat dipicu adalah "AD1". Jika domain aplikasi tersebut bukan domain aplikasi default, peristiwa juga dapat dinaikkan di domain aplikasi default.

Catatan

Runtime bahasa umum menangguhkan penghentian thread ketika penangan peristiwa untuk UnhandledException sedang dieksekusi.

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 penangan kejadian sangat kritis terhadap keamanan dan memiliki atribut HandleProcessCorruptedStateExceptionsAttribute.

Untuk mendaftarkan pengendali acara untuk event ini, Anda harus memiliki izin yang diperlukan, atau SecurityException dilemparkan.

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

Peristiwa lain untuk pengecualian yang tidak tertangani

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

Dalam aplikasi yang menggunakan Windows Forms, pengecualian yang tidak tertangani di utas aplikasi utama menyebabkan peristiwa Application.ThreadException dipicu. 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 metode Application.SetUnhandledExceptionMode untuk mengubah mode sebelum penangan kejadian UnhandledExceptionMode.ThrowExceptionThreadException dikaitkan. Ini hanya berlaku untuk utas aplikasi utama. Peristiwa UnhandledException ini dibangkitkan untuk pengecualian yang tidak tertangani yang dilemparkan di utas lain.

Kerangka kerja aplikasi Visual Basic menyediakan satu lagi peristiwa untuk menangani pengecualian yang tidak tertangani di utas utama aplikasi—peristiwa 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.