Procedura: dichiarare eventi personalizzati per proteggere la memoria (Visual Basic)
In molte circostanze è importante che l'utilizzo della memoria da parte di un'applicazione sia mantenuto a livelli ridotti. Gli eventi personalizzati consentono all'applicazione di utilizzare la memoria soltanto per gli eventi che gestisce.
Per impostazione predefinita, quando una classe dichiara un evento, il compilatore assegna della memoria a un campo per l'archiviazione delle informazioni sull'evento. Se una classe comprende molti eventi inutilizzati, essi consumano inutilmente memoria.
Anziché utilizzare l'implementazione predefinita degli eventi fornita da Visual Basic, quindi, è possibile utilizzare gli eventi personalizzati per gestire in modo più oculato l'utilizzo della memoria.
Esempio
In questo esempio, la classe utilizza un'istanza della classe EventHandlerList, archiviata nel campo Events, per memorizzare informazioni sugli eventi in uso. La classe EventHandlerList è una classe elenco ottimizzata progettata per contenere delegati.
Tutti gli eventi della classe utilizzano il campo Events per tenere traccia di quali metodi stanno gestendo ciascun 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
Vedere anche
Attività
Procedura: dichiarare eventi personalizzati per evitare il blocco (Visual Basic)