Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Hay varias circunstancias en las que es importante que una aplicación mantenga bajo su uso de memoria. Los eventos personalizados permiten a la aplicación usar memoria solo para los eventos que controla.
De forma predeterminada, cuando una clase declara un evento, el compilador asigna memoria para un campo para almacenar la información del evento. Si una clase tiene muchos eventos sin usar, no necesitan ocupar memoria.
En lugar de usar la implementación predeterminada de eventos que proporciona Visual Basic, puede usar eventos personalizados para administrar el uso de memoria con más cuidado.
Ejemplo
En este ejemplo, la clase usa una instancia de la EventHandlerList clase, almacenada en el Events
campo, para almacenar información sobre los eventos en uso. La EventHandlerList clase es una clase de lista optimizada diseñada para contener delegados.
Todos los eventos de la clase utilizan el campo Events
para hacer seguimiento de qué métodos están manejando cada evento.
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