【发布时间】:2010-01-11 13:06:40
【问题描述】:
我的应用程序有一个奇怪的行为。
我打开一个 COM 端口以通过蓝牙与设备通信。我执行以下步骤:
- 打开虚拟COM口;
- 将远程蓝牙切换到命令模式;
- 执行少量命令(例如,读取远程设备的序列号);
- 将远程蓝牙切换到数据模式;
- 向设备发送数据;
-
读取一个字节的应答(ReadByte() 从 SerialPort 类);
当我通过 Visual Studio 在调试模式下运行我的应用程序时,设备工作正常并立即响应,一切正常。
但是当我尝试直接运行它(没有附加 Visual Studio 和调试器 - 但仍然使用“调试”选项编译)时,我在第 6 步遇到超时异常。
该错误是完全可重现的(在 Visual Studio 中没有超时,并且每次都没有超时)。
有没有人知道可能导致这种行为的任何想法?
这是第 6 步的代码
private byte[] ReadResponse() {
try {
int bytes2Read = 6;
do {
this.buffer.Append((byte)ReadByte()); // <- there the timeout occurs
if (this.buffer.Length == 6) { // header receiver
// bytes 2 and 3 contain message length
bytes2Read = this.buffer[2] + (this.buffer[3] << 8);
}
} while (this.buffer.Length < bytes2Read);
return this.buffer.ToArray();
} finally {
this.buffer.Clear();
}
}
该方法位于派生自 SerialPort 类的类中。
【问题讨论】:
-
顺便说一句-串口的ReadTimeout属性是2秒,所以足够长(设备以毫秒为单位回答)。
-
仍然,显示在 6) 中进行读取的代码。省去很多猜测。
标签: c# serial-port