2013-05-05 28 views
0

我正在使用与RFID终端一起使用的API。当任一终端中触发一个事件,该API照顾它,并传递适当的参数的程序:查找发件人而不将其作为参数传递给.NET

For i = 0 to NumberOfTerminals - 1 
    myTerminals(i).ID = i 
    myTerminals(i).API.Connect() 
    AddHandler myTerminals(i).API.OnRFID, AddressOf OnRFIDSub 
End For 

Private Sub OnConnectSub(ByVal RFID As String, ByVal EventTime As String) 
    MsgBox(RFID & " : " & EventTime) 
End Sub 

的问题是,当事件被触发,存在从API传递没有sendere属性。有没有办法知道哪个终端在没有sender对象的情况下触发了该事件?

提前致谢。

+0

我相信你不需要为这个问题'C#'标签。 'vb.net'就够了。 – 2013-05-05 10:05:01

回答

1

VB语法转义我,但似乎你可以添加一个不同的处理程序到每个终端。因此,添加一个处理程序到终端i,它将终端(i)传递给作为发件人的函数。

达到此目的的最简单方法可能是lambda表达式。

2

扩大对nvoigts回答

For i = 0 to NumberOfTerminals - 1 
    myTerminals(i).ID = i 
    myTerminals(i).API.Connect() 
    'copy the id as there are problems with closing over iteration variables. 
    dim id as integer = i 
    'Lamda sub to close over id 
    AddHandler myTerminals(i).API.OnRFID, _ 
     Sub(ByVal RFID As String, ByVal EventTime As String) _ 
      OnRFIDSub(RFID,EventTime,id) 
End For 

Private Sub OnConnectSub(ByVal RFID As String, ByVal EventTime As String, 
         ByVal Sender as Integer) 'Sender now contains the terminal ID 
    MsgBox(RFID & " : " & EventTime) 
End Sub 
+0

谢谢,我会试一试... – CubicsRube 2013-05-05 10:19:16

+0

是的,它的工作完美!谢谢(和nvoigts)的解决方案。 – CubicsRube 2013-05-05 10:37:43

相关问题