Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ada beberapa keadaan ketika penting agar satu penanganan peristiwa tidak memblokir penanganan peristiwa berikutnya. Acara kustom memungkinkan acara memanggil pengendali acaranya secara asinkron.
Secara default, bidang penyimpanan cadangan untuk deklarasi peristiwa adalah delegasi multicast yang secara serial menggabungkan semua penanganan aktivitas. Ini berarti bahwa jika satu handler membutuhkan waktu lama untuk diselesaikan, itu memblokir handler lain sampai selesai. (Penangan kejadian yang berperilaku baik tidak boleh melakukan operasi yang lama atau berpotensi memblokir.)
Alih-alih menggunakan implementasi default peristiwa yang disediakan Visual Basic, Anda dapat menggunakan peristiwa kustom untuk menjalankan penanganan aktivitas secara asinkron.
Contoh
Dalam contoh ini, aksesor AddHandler menambahkan delegasi untuk setiap handler peristiwa Click ke ArrayList yang disimpan dalam bidang EventHandlerList.
Saat kode memicu peristiwa Click, aksesor RaiseEvent memanggil semua delegasi handler peristiwa secara asinkron menggunakan metode BeginInvoke. Metode itu memanggil setiap handler pada utas pekerja dan segera kembali, sehingga handler tidak dapat memblokir satu sama lain.
Public NotInheritable Class ReliabilityOptimizedControl
'Defines a list for storing the delegates
Private EventHandlerList As New ArrayList
'Defines the Click event using the custom event syntax.
'The RaiseEvent always invokes the delegates asynchronously
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
EventHandlerList.Add(value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
EventHandlerList.Remove(value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
For Each handler As EventHandler In EventHandlerList
If handler IsNot Nothing Then
handler.BeginInvoke(sender, e, Nothing, Nothing)
End If
Next
End RaiseEvent
End Event
End Class