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)