Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Istnieje kilka sytuacji, w których ważne jest, aby aplikacja zachowywała niskie użycie pamięci. Zdarzenia niestandardowe umożliwiają aplikacji używanie pamięci tylko dla zdarzeń, które obsługuje.
Domyślnie, gdy klasa deklaruje zdarzenie, kompilator przydziela pamięć dla pola do przechowywania informacji o zdarzeniu. Jeśli klasa ma wiele nieużywanych zdarzeń, niepotrzebnie zajmują pamięć.
Zamiast używać domyślnej implementacji zdarzeń zapewnianych przez program Visual Basic, można użyć zdarzeń niestandardowych do dokładniejszego zarządzania użyciem pamięci.
Przykład
W tym przykładzie klasa używa jednego wystąpienia klasy EventHandlerList, przechowywanego w polu Events, aby przechowywać informacje o zdarzeniach w użyciu. Klasa EventHandlerList jest zoptymalizowaną klasą listy przeznaczoną do przechowywania delegatów.
Wszystkie zdarzenia w klasie używają Events pola, aby śledzić, jakie metody obsługują każde zdarzenie.
Public Class MemoryOptimizedBaseControl
' Define a delegate store for all event handlers.
Private Events As New System.ComponentModel.EventHandlerList
' Define the Click event to use the delegate store.
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
Events.AddHandler("ClickEvent", value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Events.RemoveHandler("ClickEvent", value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
CType(Events("ClickEvent"), EventHandler).Invoke(sender, e)
End RaiseEvent
End Event
' Define the DoubleClick event to use the same delegate store.
Public Custom Event DoubleClick As EventHandler
AddHandler(ByVal value As EventHandler)
Events.AddHandler("DoubleClickEvent", value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Events.RemoveHandler("DoubleClickEvent", value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
CType(Events("DoubleClickEvent"), EventHandler).Invoke(sender, e)
End RaiseEvent
End Event
' Define additional events to use the same delegate store.
' ...
End Class