2011-09-06 2 views
2

Visual Basic .NET을 사용하여 USB HID 장치로 작업하고 있습니다.널 바이트 확인

대부분의 경우, 나는 완벽하게 데이터를받을 수 있지만, 천 번 정도의 전송 중 하나에서 실제로 코드가 데이터를 수신했다고 생각합니다.

장치가 바이트 배열에 씁니다. 개체 참조가 개체의 인스턴스로 설정되지 않았 음을 말하고, 심지어 내가 NullReferenceException이 얻을이 함께 불행하게도

If myDevice.dataPacket(1) <> Nothing then 
    myDevice.rxDataReady = False 

: I는 수신 된 패킷이 이런 일을 수행하여, 비어 있는지 확인하고 싶었다 .

다른 방법이 있나요? 아니면 그냥 NullReferenceException을 처리해야합니까? 이 루틴을 1 분에 수백 번 실행하면 예외가 느리게 발생합니다.

답변

6

그래서, 몇 가지. Byte

  1. 는 값 형식이므로 null 될 수 없다. VB.Net에서 등호 기호 =을 사용하여 Nothing을 설정하거나 확인하면 값이 "기본값"을 보유하고 있는지 실제로 설정하거나 확인하고 있습니다. 숫자 유형의 "기본 값은"제로 그래서이 두 문장은 동일하다 :

    If MyByte = Nothing Then ...

    If MyByte = 0 Then ....

  2. 이 때문에 위 규칙의 사용자가 수신 결코해야 NullReferenceException (NRE)에 액세스 할 때 바이트는 null이 될 수 없으므로 그러나 바이트 일 수 있으며은 null이 될 수 있습니다. 따라서 귀하의 경우 당신은 확인해야합니다

    If myDevice.dataPacket IsNot Nothing Then

  3. dataPacket 내의 바이트 당신은 또한 확인 (dataPacket가 null가 아닌 것을 확인 후) dataPacket.Length 속성을 확인 할 수 있습니다 설정 방법에 따라 배열에 충분한 인덱스가 있다는 것입니다. 지수 밖으로 나가면 IndexOutOfRangeException가 표시됩니다.

    If (myDevice.dataPacket IsNot Nothing) AndAlso (myDevice.dataPacket.Length >= 100) Then

0

이에 구문을 변경해보십시오 :

If NOT myDevice.dataPacket(1) is Nothing then 
    myDevice.rxDataReady = False 
0

당신은 그것을 초기화하는 (신규)?

myDevice.dataPacket = new List(Of Byte)()