Application.DispatcherUnhandledException Kejadian
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Terjadi ketika pengecualian dilemparkan oleh aplikasi tetapi tidak ditangani.
public:
event System::Windows::Threading::DispatcherUnhandledExceptionEventHandler ^ DispatcherUnhandledException;
public event System.Windows.Threading.DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException;
member this.DispatcherUnhandledException : System.Windows.Threading.DispatcherUnhandledExceptionEventHandler
Public Custom Event DispatcherUnhandledException As DispatcherUnhandledExceptionEventHandler
Jenis Acara
Contoh
Contoh berikut menunjukkan cara memproses pengecualian yang tidak tertangani dengan menangani DispatcherUnhandledException peristiwa.
using System.Windows;
using System.Windows.Threading;
namespace SDKSample
{
public partial class App : Application
{
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
// Process unhandled exception
// Prevent default unhandled exception processing
e.Handled = true;
}
}
}
Imports System.Windows
Imports System.Windows.Threading
Namespace SDKSample
Partial Public Class App
Inherits Application
Private Sub App_DispatcherUnhandledException(ByVal sender As Object, ByVal e As DispatcherUnhandledExceptionEventArgs)
' Process unhandled exception
' Prevent default unhandled exception processing
e.Handled = True
End Sub
End Class
End Namespace
Keterangan
Secara default, Windows Presentation Foundation menangkap pengecualian yang tidak tertangani, memberi tahu pengguna tentang pengecualian dari kotak dialog (dari mana mereka dapat melaporkan pengecualian), dan secara otomatis mematikan aplikasi.
Namun, jika aplikasi perlu melakukan pemrosesan pengecualian kustom yang tidak tertangani dari lokasi terpusat, Anda harus menangani DispatcherUnhandledException.
DispatcherUnhandledException dinaikkan oleh Application untuk setiap pengecualian yang tidak ditangani oleh kode yang berjalan pada utas UI utama.
Jika pengecualian tidak ditangani pada utas UI latar belakang (utas dengan utasnya sendiri Dispatcher) atau utas pekerja latar belakang (utas tanpa Dispatcher), pengecualian tidak diteruskan ke utas UI utama. Akibatnya, DispatcherUnhandledException tidak dibesarkan. Dalam keadaan ini, Anda harus menulis kode untuk melakukan hal berikut:
Menangani pengecualian pada utas latar belakang.
Mengirimkan pengecualian tersebut ke utas UI utama.
Kembalikan pada utas UI utama tanpa menanganinya agar DispatcherUnhandledException dapat dinaikkan.
Untuk informasi selengkapnya, lihat gambaran umum Model Utas .
Penanganan DispatcherUnhandledException aktivitas diteruskan argumen DispatcherUnhandledExceptionEventArgs yang berisi informasi kontekstual mengenai pengecualian, termasuk:
Pengecualian (Exception).
dari Dispatcher mana asalnya (Dispatcher).
Anda dapat menggunakan informasi ini untuk menentukan apakah pengecualian dapat dipulihkan atau tidak. Pengecualian yang dapat dipulihkan mungkin berupa FileNotFoundException, misalnya, sementara pengecualian yang tidak dapat dipulihkan mungkin berupa StackOverflowException, misalnya.
Ketika Anda memproses pengecualian yang tidak tertangani dari DispatcherUnhandledException, dan Anda tidak ingin WPF terus memprosesnya, Anda perlu mengatur properti ke Handledtrue
.
Tidak seperti peristiwa lain yang Application muncul, DispatcherUnhandledException tidak memiliki implementasi virtual yang dilindungi yang cocok (OnDispatcherUnhandledException). Akibatnya, kelas yang berasal dari Application harus selalu mendaftarkan penanganan DispatcherUnhandledException aktivitas untuk memproses pengecualian yang tidak tertangani.