为什么A工作但不是B?

时间:2010-10-06 12:40:24

标签: vb.net object

我编写了一个自定义类,我从类似于

的事件过程实例化
Private Sub EventHandler
    For intForCounter = 1 to intUserEntry
        Dim newObj As New MyClass
        newObj.Property
        newObj.Method()
    Next
End Sub

类本身看起来像这样

Public Property Time As Date
'First attempt:
Dim tmeExec As New Timer
Public Sub Method()
    'Second Attempt
    Dim tmeExec As New Timer
    'A bunch of code for converting a timespan to milliseconds and storing that in intInterval
    With tmeExec
        .Enabled = True
        .Interval = intInterval
    End With
    AddHandler tmeExec.Tick, AddressOf TickHandler
End Sub

Private Sub TickHandler(ByVal myObj As Object, ByVal myArgs As EventArgs)
    Dim tmeSender As Timer = CType(myObj, Timer)
    tmeSender.Stop()
    'Some code here to do something
End Sub

当我将时间放置在“First Attempt”位置时,所有内容都会在指定的最后一个时间间隔内开启。

我的期望是每次实例化一个新对象时,都会用它实例化一个新的计时器,因此将实例化放在类中是正确的方法。事实并非如此。

但我想知道它为什么会这样做。知道如何运作是很好的,但是如果你知道为什么有些东西有效,你就不会再这样做了。我问我的教授,但并没有像我想的那样完全理解他的答案。

1 个答案:

答案 0 :(得分:0)

如果将Timer的实例化放在Method之外(在'First attempt'处),那么您只有一个计时器。每次调用Method()时,只需设置现有计时器的属性并向现有计时器添加新的事件处理程序。

通过将Timer实例化移动到Method()中,每次调用Method()时,都会创建一个新的Timer对象。