Sdílet prostřednictvím


Postupy: Deklarování vlastních událostí k zabránění bloková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

Postupy: Deklarování vlastních událostí pro konzervaci paměti (Visual Basic)

Referenční dokumentace

ArrayList

BeginInvoke

Další zdroje

Události (Visual Basic)