Útmutató: Egyéni események deklarálása a memória megőrzéséhez (Visual Basic)
Számos olyan körülmény van, amikor fontos, hogy egy alkalmazás alacsonyan tartsa a memóriahasználatát. Az egyéni események lehetővé teszik, hogy az alkalmazás csak az általa kezelt eseményekhez használjon memóriát.
Alapértelmezés szerint, amikor egy osztály deklarál egy eseményt, a fordító memóriát foglal le egy mező számára az eseményadatok tárolásához. Ha egy osztály sok nem használt eseményt használ, feleslegesen fel kell vennie a memóriát.
A Visual Basic által biztosított események alapértelmezett implementálása helyett egyéni eseményeket is használhat a memóriahasználat körültekintőbb kezeléséhez.
Példa
Ebben a példában az osztály az osztály egy, a EventHandlerList mezőben tárolt példányát használja a Events
használt eseményekre vonatkozó információk tárolására. Az EventHandlerList osztály egy olyan optimalizált listaosztály, amelyet meghatalmazottak tárolására terveztek.
Az osztály összes eseménye a Events
mező használatával nyomon követi, hogy milyen metódusok kezelik az egyes eseményeket.
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