我有一個奇怪的行爲,我的應用程序。在獨立模式下的SerialPort超時
我打開一個COM端口,通過藍牙與設備通信。我執行以下步驟:
- 打開虛擬COM端口;
- 將遙控藍牙切換到命令模式;
- 執行一些命令(例如,讀取遠程設備的序列號);
- 將遠程藍牙切換到數據模式;
- 發送數據到設備;
從串口讀取一個字節的答案(ReadByte());
該設備工作正常,立即回答,一切都很好,而我通過Visual Studio在調試模式下運行我的應用程序。
但是,當我嘗試直接運行(不Visual Studio和adebugger attatched - 但仍與「調試」選項編譯)我會在第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秒所以很長eanough(以毫秒爲單位的設備應答)。 – 2010-01-11 13:20:16
仍然,顯示在6)中讀取的代碼。節省很多猜測。 – 2010-01-11 13:26:42