Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Er zijn verschillende omstandigheden waarin het belangrijk is dat een gebeurtenis-handler de volgende gebeurtenis-handlers niet blokkeert. Met aangepaste gebeurtenissen kan een gebeurtenis zijn handlers asynchroon 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. Correct functionerende eventhandlers 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.
Voorbeeld
In dit voorbeeld voegt de AddHandler accessor de "delegate" voor elke handler van de Click event toe aan een ArrayList die opgeslagen is 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 werkdraad en retourneert onmiddellijk, zodat de 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