我编写了一个自定义类,我从类似于
的事件过程实例化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”位置时,所有内容都会在指定的最后一个时间间隔内开启。
我的期望是每次实例化一个新对象时,都会用它实例化一个新的计时器,因此将实例化放在类中是正确的方法。事实并非如此。
但我想知道它为什么会这样做。知道如何运作是很好的,但是如果你知道为什么有些东西有效,你就不会再这样做了。我问我的教授,但并没有像我想的那样完全理解他的答案。
答案 0 :(得分:0)
如果将Timer的实例化放在Method之外(在'First attempt'处),那么您只有一个计时器。每次调用Method()时,只需设置现有计时器的属性并向现有计时器添加新的事件处理程序。
通过将Timer实例化移动到Method()中,每次调用Method()时,都会创建一个新的Timer对象。