Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Számos olyan körülmény van, amikor fontos, hogy egy eseménykezelő ne tiltsa le a későbbi eseménykezelőket. Az egyéni események lehetővé teszik, hogy az esemény aszinkron módon hívja meg az eseménykezelőket.
Alapértelmezés szerint az eseménydeklaráció háttértároló mezője egy multicast delegált, amely sorosan kombinálja az összes eseménykezelőt. Ez azt jelenti, hogy ha az egyik kezelő végrehajtása hosszú időt vesz igénybe, addig blokkolja a többi kezelőt, amíg be nem fejeződik. (A jól viselkedő eseménykezelőknek soha nem szabad hosszadalmas vagy potenciálisan blokkoló műveleteket végrehajtaniuk.)
A Visual Basic által biztosított események alapértelmezett implementálása helyett egyéni eseményekkel aszinkron módon hajthatja végre az eseménykezelőket.
példa
Ebben a példában a AddHandler kiegészítő hozzáadja az esemény minden kezelőjének delegáltját Click a ArrayList mezőben tároltakhozEventHandlerList.
Amikor a kód elindítja az Click eseményt, a kiegészítő az RaiseEvent összes eseménykezelő delegáltat aszinkron módon hívja meg a BeginInvoke metódus használatával. Ez a metódus meghívja az egyes kezelőket egy feldolgozó szálon, és azonnal visszatér, így a kezelők nem tudják blokkolni egymást.
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