Cara: Mendeklarasikan Peristiwa Kustom untuk Menghindari Pemblokiran (Visual Basic)
Ada beberapa keadaan ketika satu penanganan aktivitas seharusnya tidak memblokir penanganan aktivitas berikutnya. Peristiwa kustom memungkinkan peristiwa untuk memanggil penanganan aktivitasnya secara asinkron.
Secara default, bidang backing-store untuk deklarasi peristiwa adalah delegasi multicast yang menggabungkan semua penanganan aktivitas secara serial. Ini berarti bahwa jika satu penanganan membutuhkan waktu lama untuk diselesaikan, penanganan lain akan diblokir hingga penanganan tersebut selesai. (Penanganan aktivitas yang berperilaku baik tidak boleh melakukan operasi yang panjang 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 penanganan peristiwa Click
ke ArrayList yang disimpan di bidang EventHandlerList
.
Saat kode memunculkan peristiwa Click
, aksesor RaiseEvent
memanggil semua penanganan aktivitas yang mendelegasikan secara asinkron menggunakan metode BeginInvoke. Metode tersebut memanggil setiap penanganan pada utas pekerja dan segera kembali, sehingga penanganan 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
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk