C#中使用System.IO.Ports.SerialPort進行串口通信網上資料也很多,但都沒有提及一些細節;
比如 串口有時候並不會一次性把你想要的數據全部傳輸給你,可能會分為1次,2次,3次分別傳送一部分數據給你,這時候一般會設置字符串的結束符來判定是否傳輸完畢(一般設置為\n ,\r)
傳輸過程中字符串的后面都會跟着無數個\0\0\0;經過同事測試,每次都從串口緩存中取出所有的傳輸數據,然后再進行判斷,可以獲取完整的字符串;代碼如下:

//讀取完整字符串 硬件掃描槍設置傳輸結束符為\r byte[] readBuffer = new byte[serialPortScan.BytesToRead]; tempCode += serialPortScan.ReadExisting().Trim( '\0' ); if ( tempCode.IndexOf( '\r' ) > 0 ) { singleCode = tempCode.Replace( REPLACE_URL, "" ).Trim( '\r' ); serialPortScan.DiscardInBuffer(); tempCode = string.Empty; } else { return; }