.Net SerialPort條碼槍接收數據換行不完全斷斷續續異常
諸多公司通常會有所謂倉儲 有些則會導入條碼掃描取代手動輸入的E化 節省keyin耗時 近期由於移植過來的母公司早期寫的方式透過VB6的code based過舊不合適 要再另外寫一個.net 版本的barcode scanner 擴充程式接收來做不同業務邏輯 此時才發覺使用的條碼槍為rs232串口接收 需要透過 serial port 做讀取接收 https://www.posdata.eu/product/2874/datalogic-powerscan-pm9501-2d-hp-barcode-scanner-rs232-kit.html 只能說時常跟serial port接觸阿.... 其實也不難用.net 可能C#或是vb.net寫的 通常不外乎自己拉一個SerialPort控制項 或是程式初始物件 //create a Serial Port object SerialPort sp = new SerialPort (); 再去做DataReceivedHandler的事件註冊撰寫 這次發現在call SerialPort.ReadExisting方法從緩衝區讀出資料時候有時會是完整一行 有時則是會給我拆行 由於接收當下立馬有子字串拆接地幾個字元處裡 就會時常拆解錯 https://learn.microsoft.com/en-us/dotnet/api/system.io.ports.serialport.readexisting?view=net-8.0 建議在call SerialPort.ReadExisting方法之前 去call Thread.Sleep 方法 讓其延遲0.2~0.5秒 避免掃刷過程過快導致緩衝區資料來不及存入就被不完整讀取出來 另外補充說明 一般掃條碼如果用的是USB接口的就不是透過serialport而是藉由文字框監聽事件 相當於滑鼠鍵盤keyin 如果是透過rs232這類接口則無法藉由文字框監聽事件來讀取喔 如果不能進庫房現場確認user電腦的時候 可以請user先打開notepad嘗試請他測試能否打印進去就可以區別出來了 另外一維條碼還會有空間限制,你如果字串封裝成barcode,字串內文愈長則barcode就會長愈長,而二維條碼不會有此問題但相關字型和既定硬體設備...