2011-07-28 5 views
1

핀 패드와 통신하기 위해 현재 VB.NET 솔루션에 Florian Leitner의 HID USB library을 사용하고 있습니다. 자신의 샘플 코드에 따라, 나는 usbBuffer라는 ArrayList에 저장하는 장치에서 들어오는 응답을 처리하는 이벤트 핸들러를 설정합니다ArrayList.RemoveAt()가 작동하지 않는 이유를 알아낼 수 없습니다.

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

mscln은 synclock의 개체가 아무 것도 될 수 없다고 말합니다. 이며 lock 객체의 값을 cjhange 할 수 없습니다.

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

규칙

잠금 개체 값을 말한다. lockobject 값은 Nothing 일 수 없습니다. SyncLock 문에서 잠금 개체를 사용하려면 먼저 잠금 개체를 만들어야합니다.

SyncLock 블록을 실행하는 동안 lockobject 값을 변경할 수 없습니다. 메커니즘은 잠금 오브젝트가 변경되지 않아야합니다.

관련 문제