Cómo: Declarar eventos personalizados para conservar memoria (Visual Basic)
Hay varias circunstancias en las que es importante que una aplicación mantenga su uso de memoria bajo. 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 usan el Events
campo para realizar un seguimiento de los métodos que controlan 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