是否WithEvents
在 Visual Basic 中保持其 EventHandler
s 何时更改对对象的引用?
假设我已经声明了一个按钮,触发事件:
Private WithEvents _MyButton
现在我订阅了一个事件处理程序:
Private Sub _MyButton_Click() Handles _MyButton.Click
' Here I DoClick()
End Sub
请问
DoClick()
当我更改按钮对象的实例时仍然调用函数,如下所示?_MyButton = New Button()
最佳答案
这让我很好奇,所以我编写了一个小型控制台应用程序来可视化如果您使用计时器进行此实验会发生什么:
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
如果你运行这段代码,你会发现它确实在
_t
的实例时附加了事件处理程序。被替换。我不知道它是如何做到的,但神奇之处可能在于 Handles
关键词。无论如何,答案是肯定的。
关于.net - 在更改对对象的引用时,Visual Basic 中的 WithEvents 是否保留其 EventHandlers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15335201/