Baiklah, ini yang mudah:
Apa perbedaan antara
Application.ThreadException
danAppDomain.CurrentDomain.UnhandledException
?Apakah saya perlu menangani keduanya?
Terima kasih!
sumber
Baiklah, ini yang mudah:
Apa perbedaan antara Application.ThreadException
dan AppDomain.CurrentDomain.UnhandledException
?
Apakah saya perlu menangani keduanya?
Terima kasih!
Application.ThreadException dikhususkan untuk Formulir Windows. Winforms menjalankan penangan peristiwa sebagai tanggapan atas pesan yang dikirim kepadanya oleh Windows. Acara Klik misalnya, saya yakin Anda mengenal mereka. Jika penangan kejadian seperti itu melempar pengecualian maka ada penghentian di dalam loop pesan Winforms yang menangkap pengecualian itu.
Backstop tersebut mengaktifkan peristiwa Application.ThreadException . Jika Anda tidak menimpanya, pengguna akan mendapatkan ThreadExceptionDialog . Yang memungkinkan dia untuk mengabaikan pengecualian dan tetap menjalankan program Anda. Bukan ide yang bagus btw.
Anda bisa menonaktifkan perilaku ini dengan memanggil Application.SetUnhandledExceptionMode () dalam metode Main () di Program.cs. Tanpa backstop itu, hal yang biasa terjadi ketika utas mati karena pengecualian yang tidak tertangani: AppDomain.UnhandledException diaktifkan dan program dihentikan.
Fwiw: "ThreadException" adalah pilihan nama yang sangat buruk. Ini tidak ada hubungannya dengan utas.
Application.ThreadException
. Saya mengajukan pertanyaan untuk ini [di sini ] dengan kode C # kecil saya.Dari sumber :
Application.ThreadException
dapat ditangkap dan aplikasi dapat dilanjutkan (secara umum bukan ide yang bagus, tetapi untuk aplikasi seperti menjalankan beberapa tindakan secara berkala ini adalah solusi yang baik).Untuk menangkap pengecualian yang terjadi di utas yang tidak dibuat dan dimiliki oleh Windows Forms, gunakan file
AppDomain.UnhandledException
. Ini memungkinkan aplikasi untuk mencatat informasi tentang pengecualian sebelum penangan default sistem melaporkan pengecualian kepada pengguna dan menghentikan aplikasi.Penanganan pengecualian ini tidak mencegah aplikasi untuk dihentikan.
Maksimum yang bisa dilakukan (data program bisa rusak jika pengecualian tidak ditangani) adalah menyimpan data program untuk pemulihan nanti. Setelah itu domain aplikasi dibongkar dan aplikasi dihentikan.
Untuk lebih jelasnya, lihat MSDN .
sumber
Oke - Saya memilikinya di depan saya, sedikit kode dari msdn ini cukup jelas:
sumber
Masalahnya adalah,
ThreadException
terjadi karena masalah dengan utas Anda,Unhandled Exception
ini dipecat jika Anda membuat kode pengecualian yang tidak ditangani.Cara termudah untuk menyebabkan yang kedua adalah dengan membuat aplikasi tanpa mencoba ... menangkap blok dan membuat pengecualian.
Sekarang jika Anda membutuhkan asuransi, Anda dapat menangani keduanya, namun jika Anda menangkap dan menangani Anda
exceptions
dengan benar maka Anda tidak memerlukanUnhandledException
pawang karena ini seperti menangkap semua.sumber