我使用SerialPort从Handheld Scanner接收文本。此外,Handheld Scanner使用USB端口与计算机连接,但其驱动程序会将其连接到虚拟SerialPort。
所以我使用以下代码来接收文本:
SerialPort serialPort=new SerialPort("COM7");
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(serialPort.ReadExisting());
}
那么,当我运行程序时,如果条形码为“ 1234567890”,则收到的文本将无规则地分成几部分。
例如:
123
45
7890
有时例如:
123456
7890
有时例如:
12
34
567890
这有什么问题,为什么文本无规则地分成几部分?如何将其组合在一起但又不能分开?
PS:我尝试了其他品牌的手持式扫描仪,例如Datalogic QD2430 / Honeywell GHD1900,但是这些问题仍然存在。
答案 0 :(得分:3)
串行端口I / O可以被视为流接口,即您可能不会在单个回调中接收到所有数据。
看到的时候:
12
34
567890
...我怀疑正在发生的事情是您的回调被3次Console.WriteLine
调用调用了三次。因此,您的输出看起来很糟糕。
通常,您需要读取所有字节,直到到达某些终止符为止,这取决于设备。在此之前,您将需要缓冲接收到的数据。在此之前,取决于应用程序的性质,您可能无法处理请求。
答案 1 :(得分:0)
配置扫描仪,使其在每次扫描后都应添加回车符,然后才得到这样的结果
var result = serialPort.ReadLine();