无法弄清楚为什么ArrayList.RemoveAt()不起作用

时间:2011-07-28 14:47:57

标签: vb.net arraylist

我目前在我的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无法正常工作,因为列表中的第一个元素在处理程序完成后仍然存在。有人可以告诉我我做错了什么,或者使用不同的方法吗?

1 个答案:

答案 0 :(得分:0)

msdn说synclock的对象不可能是什么。 并且你不能cjhange lockobject的值。

msdn http://msdn.microsoft.com/en-us/library/3a86s51t(VS.80).aspx

规则

锁定对象值。 lockobject的值不能是Nothing。在SyncLock语句中使用锁定对象之前,必须先创建锁定对象。

执行SyncLock块时,无法更改lockobject的值。该机制要求锁定对象保持不变。