.net - net - ¿WithEvents en Visual Basic mantiene sus manejadores de eventos cuando se cambia la referencia al objeto?
objeto y evento en visual basic (1)
Esto me dio curiosidad, así que escribí una pequeña aplicación de consola para visualizar qué sucede si haces este experimento usando un temporizador:
Private WithEvents _t As New Timers.Timer With {.Enabled = True}
Private Sub _t_Elapsed(sender As Object, e As Timers.ElapsedEventArgs) Handles _t.Elapsed
Console.WriteLine("tick")
End Sub
Sub Main()
'' let it tick for 5 seconds
Task.Delay(5000).Wait()
'' destroy the current timer
Console.WriteLine("destroying this timer")
_t.Dispose()
_t = Nothing
'' add a little pause
Task.Delay(1000).Wait()
'' create a new timer
Console.WriteLine("creating a new timer")
_t = New Timers.Timer With {.Enabled = True}
'' let it tick for 5 seconds
Task.Delay(5000).Wait()
End Sub
Si ejecuta este código, encontrará que realmente adjunta el controlador de eventos cuando se reemplaza la instancia de _t
. No sé cómo funciona eso, pero la magia probablemente se encuentre en la palabra clave Handles
. De todos modos, la respuesta es sí.
¿ WithEvents
en Visual Basic mantiene su EventHandler
s cuando se cambia la referencia al objeto?
Digamos que he declarado un botón, disparando eventos:
Private WithEvents _MyButton
Ahora me suscribo a un controlador de eventos:
Private Sub _MyButton_Click() Handles _MyButton.Click
'' Here I DoClick()
End Sub
¿ DoClick()
función DoClick()
cuando modifique la instancia del objeto del botón como se muestra a continuación?
_MyButton = New Button()