Does WithEvents
in Visual Basic keep its EventHandler
s when changing the reference to the object?
Say I have declared a button, firing events:
Private WithEvents _MyButton
Now I am subscribing to an event handler:
Private Sub _MyButton_Click() Handles _MyButton.Click
' Here I DoClick()
End Sub
Will the DoClick()
function be still called when I change the instance of the button object like shown below?
_MyButton = New Button()
This got me curious so I wrote a small console application to visualize what happens if you do this experiment using a timer:
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
If you run this code, you will find that it does indeed attach the event handler when the instance of _t
is replaced. I don't know how it does that, but the magic probably lies in the Handles
keyword. Anyhow, the answer is yes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With