Jak: deklarovat vlastní události zabránit zablokování (Visual Basic)
Je důležité následné obslužné rutiny blokovat tuto obslužnou rutinu události jeden existuje několik okolností.Vlastní události povolit události volání jeho obslužné rutiny událostí asynchronně.
Ve výchozím nastavení je pole zálohování úložiště pro deklaraci události vícesměrového vysílání delegát, který kombinuje sériově obslužné rutiny.To znamená, že pokud jeden popisovač trvá dlouhou dobu, zablokuje ostatní obslužné rutiny dokud nebude dokončena.(Které jsou v pořádku obslužné rutiny by nikdy dlouhé nebo potenciálně blokující operace provádět.)
Namísto výchozí implementace událostí, které poskytuje jazyka Visual Basic můžete použít vlastní událost obslužné rutiny událostí spustit asynchronně.
Příklad
V tomto příkladu AddHandler přidá přístup delegáta pro každý popisovač Click událost, ArrayList uložené v EventHandlerList pole.
Když kód vznese Click události, RaiseEvent přístupový objekt vyvolá všechny delegáty obslužné rutiny událostí asynchronně pomocí BeginInvoke metoda.Tato metoda vyvolá každý popisovač na pracovní podproces a vrátí okamžitě, tak obslužné rutiny nelze blokovat vzájemně.
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
Viz také
Úkoly
Jak: deklarovat vlastní události šetřit paměť (Visual Basic)