我目前在我的VB.NET解决方案中使用Florian Leitner的HID USB library与pin pad进行通信。根据他的示例代码,我设置了一个事件处理程序来处理来自设备的传入响应,这些响应存储在名为usbBuffer的ArrayList中:
Private Sub BufferEventHandler(ByVal sender As Object, ByVal e As System.EventArgs)
If USBInterface.usbBuffer.Count > 0 Then
While USBInterface.usbBuffer(0) Is Nothing
SyncLock USBInterface.usbBuffer.SyncRoot
USBInterface.usbBuffer.RemoveAt(0)
End SyncLock
End While
_receiveArray = CType(USBInterface.usbBuffer(0), Byte())
_usbInterface.stopRead()
SyncLock USBInterface.usbBuffer.SyncRoot
USBInterface.usbBuffer.RemoveAt(0)
End SyncLock
End If
End Sub
问题是RemoveAt无法正常工作,因为列表中的第一个元素在处理程序完成后仍然存在。有人可以告诉我我做错了什么,或者使用不同的方法吗?
答案 0 :(得分:0)
msdn http://msdn.microsoft.com/en-us/library/3a86s51t(VS.80).aspx说
规则
锁定对象值。 lockobject的值不能是Nothing。在SyncLock语句中使用锁定对象之前,必须先创建锁定对象。
执行SyncLock块时,无法更改lockobject的值。该机制要求锁定对象保持不变。