我需要在set定时器上调用一个函数。目前,我正在使用http://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed(v=vs.110).aspx
中的system.timers.timer示例代码iaTimer = New System.Timers.Timer(60000)
'Hook up the Elapsed event for the time
AddHandler aTimer.Elapsed, (AddressOf OnTimedEvent)
aTimer.Enabled = True
'The event handler for the Timer.Elapsed event.
Public Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs, ByVal companies() As companyAccount)
timermain(companies)
End Sub
我不知道如何将参数传递给委托。 array companies()是一个companyAccount对象的数组,它们基本上是结构体。我需要将这些参数提供给timermain函数。在代码的其他地方,我有一个委托,接受更新文本框的参数,所以这应该是可能的。
我认为这个问题很相似。 How to pass the sender parameter to the system.timers.timer
答案 0 :(得分:1)
您无法更改Timer.Elapsed
事件签名(或通常更改事件的签名)以传递其他参数。相反,您应该在事件处理程序可访问的范围中声明您的companies
变量。
如果所有这些代码都在同一个类中,你可以通过使它成为类级别来实现。
Class SomeClass
Private companies() As CompanyAccount
Sub SetupTimer()
iaTimer = New System.Timers.Timer(60000)
' Hook up the Elapsed event for the time
AddHandler aTimer.Elapsed, (AddressOf OnTimedEvent)
aTimer.Enabled = True
End Sub
' The event handler for the Timer.Elapsed event.
Public Sub OnTimedEvent(source As Object, e As System.Timers.ElapsedEventArgs)
timermain(companies)
End Sub
End Class
您也可以使用lambda表达式:
Dim companies() As CompanyAccount
companies = ...
iaTimer = New System.Timers.Timer(60000)
AddHandler aTimer.Elapsed, Sub(sender, e) timermain(companies)
aTimer.Enabled = True