我有这段代码:
Friend Sub Main(args As String())
Dim t1 = New Threading.Timer(AddressOf MyTimerCallback)
Dim t2 = New Threading.Timer(AddressOf MyTimerCallback, Nothing, 0, 1000)
End Sub
Private Sub MyTimerCallback()
'do something
End Sub
Main
中第二行中的第一个arg存在编译器错误:
参数匹配参数'回调'缩小到System.Threading.TimerCallback'
Threading.Timer
构造函数重载都将Threading.TimerCallback
作为第一个参数,这是一个带有一个Object
参数的委托。我理解第一行是由于Relaxed Delegate Conversion而起作用的,但是为什么它不适用于Main
中的第二行,它使用具有相同第一个参数的该构造函数的另一个重载?
此外,这也有效:
Dim t3 = New Threading.Timer(New Threading.TimerCallback(AddressOf MyTimerCallback), Nothing, 0, 1000)
为什么这样做而不是Dim t2 = New Threading.Timer(AddressOf MyTimerCallback, Nothing, 0, 1000)
?