Procedure: Aangepaste gebeurtenissen declareren om blokkeren te voorkomen (Visual Basic)
Er zijn verschillende omstandigheden waarin het belangrijk is dat een gebeurtenis-handler de volgende gebeurtenis-handlers niet blokkeert. Met aangepaste gebeurtenissen kan de gebeurtenis asynchroon de gebeurtenis-handlers aanroepen.
Standaard is het veld backing-store voor een gebeurtenisdeclaratie een multicast-gemachtigde die alle gebeurtenis-handlers serieel combineert. Dit betekent dat als de ene handler lang duurt om te voltooien, de andere handlers worden geblokkeerd totdat deze is voltooid. (Goed opgevoede gebeurtenis-handlers mogen nooit langdurige of mogelijk blokkerende bewerkingen uitvoeren.)
In plaats van de standaard implementatie te gebruiken van gebeurtenissen die Visual Basic biedt, kunt u een aangepaste gebeurtenis gebruiken om de gebeurtenis-handlers asynchroon uit te voeren.
Opmerking
In dit voorbeeld voegt de AddHandler
toegangsfunctie de gemachtigde voor elke handler van de Click
gebeurtenis toe aan een ArrayList opgeslagen in het EventHandlerList
veld.
Wanneer de code de Click
gebeurtenis genereert, roept de RaiseEvent
accessor alle gebeurtenishandlers asynchroon aan met behulp van de BeginInvoke methode. Deze methode roept elke handler aan op een werkrolthread en retourneert onmiddellijk, zodat handlers elkaar niet kunnen blokkeren.
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