Udostępnij za pośrednictwem


Porady: deklarowanie zdarzeń niestandardowych w celu unikania blokowania (Visual Basic)

Nie kilka okoliczności, w jest ważne, programu obsługi zdarzeń jeden nie blokuje programy obsługi zdarzeń kolejnych.Zdarzenia niestandardowe umożliwiają zdarzenia do wywołania asynchronicznego jej obsługi zdarzeń.

Domyślnie pole oporowe magazynu dla deklaracji zdarzenia jest multiemisji pełnomocnika, który łączy seryjnie wszystkich procedur obsługi zdarzeń.Oznacza to, że jeśli jeden program obsługi zajmuje dużo czasu, aby zakończyć, blokuje innych programów obsługi dopóki nie zakończy on.(Programy obsługi zdarzeń dobrze działające nigdy nie należy wykonywać operacje długie lub blokowania potencjalnie.)

Zamiast używać Domyślna implementacja zdarzeń, które zapewnia języka Visual Basic, można użyć zdarzenia niestandardowego asynchronicznie wykonanie procedury obsługi zdarzeń.

Przykład

W tym przykładzie AddHandler akcesor dodaje obiekt delegowany dla każdego obsługi Click zdarzenie, aby ArrayList przechowywane w EventHandlerList pola.

Gdy kod podbicia Click zdarzenie, RaiseEvent akcesor wywołuje wszystkich pełnomocników obsługi zdarzeń asynchronicznie za pomocą BeginInvoke metody.Metoda wywołuje każdy program obsługi na wątku roboczego i zwraca niezwłocznie, więc obsługi nie można zablokować sobie nawzajem.

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

Zobacz też

Zadania

Porady: deklarowanie zdarzeń niestandardowych w celu zachowywania pamięci (Visual Basic)

Informacje

ArrayList

BeginInvoke

Inne zasoby

Zdarzenia (Visual Basic)