.NET System.Timers.Timer如何将参数传递给委托函数?

时间:2014-08-08 18:28:51

标签: .net vb.net

我需要在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

1 个答案:

答案 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