加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

.net – 在更改对象的引用时,Visual Basic中的WithEvents是否保

发布时间:2020-12-17 00:01:22 所属栏目:大数据 来源:网络整理
导读:Visual Basic中的WithEvents在更改对象的引用时是否保留其EventHandler? 说我已经宣布一个按钮,发射事件: Private WithEvents _MyButton 现在我订阅了一个事件处理程序: Private Sub _MyButton_Click() Handles _MyButton.Click ' Here I DoClick()End Su
Visual Basic中的WithEvents在更改对象的引用时是否保留其EventHandler?

说我已经宣布一个按钮,发射事件:

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关键字.无论如何,答案是肯定的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读