visual objeto net eventos evento ejemplos crear .net vb.net events event-handling handles

.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()