我正在使用Visual Basic .NET来使用USB HID设备.
大多数时候,我可以完美地从它接收数据......但是每千次传输中有一次传输,我的代码会认为它实际上没有收到数据.
设备写入一个字节数组.我想通过这样做来检查收到的数据包是否为空:
If myDevice.dataPacket(1) <> Nothing then
myDevice.rxDataReady = False
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使有这个,我得到一个NullReferenceException,说对象引用没有设置为对象的实例.
有没有不同的方法来做到这一点,或者我应该只处理NullReferenceException?如果我每分钟执行这个例程数百次,那么将添加异常缓慢的事情吗?
所以,有几件事.
A Byte是值类型,因此永远不会null.在VB.Net中,当您设置或检查Nothing使用等号时,=您实际上正在设置或检查该值是否保持"默认值".对于数字类型,"默认值"为零,因此这两个语句是相同的:
If MyByte = Nothing Then ...
If MyByte = 0 Then ....
由于上述规则,NullReferenceException在访问字节时不应该收到(NRE),因为一个字节不能为空.但是,持有字节的东西可以为null.所以在你的情况下你应该检查:
If myDevice.dataPacket IsNot Nothing Then
根据dataPacket设置字节的方式,您可能还需要检查dataPacket.Length属性(在检查dataPacket非null后)以确保数组中有足够的索引.如果你超出指数,你会得到一个IndexOutOfRangeException.
If (myDevice.dataPacket IsNot Nothing) AndAlso (myDevice.dataPacket.Length >= 100) Then
| 归档时间: |
|
| 查看次数: |
10362 次 |
| 最近记录: |