Sdílet prostřednictvím


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)

Referenční dokumentace

ArrayList

BeginInvoke

Další zdroje

Události (Visual Basic)