为什么来自SerialPort的文本会分成几部分?

时间:2018-08-05 02:27:47

标签: c#

我使用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,但是这些问题仍然存在。

2 个答案:

答案 0 :(得分:3)

串行端口I / O可以被视为流接口,即您可能不会在单个回调中接收到所有数据。

看到的时候:

12
34
567890

...我怀疑正在发生的事情是您的回调被3次Console.WriteLine调用调用了三次。因此,您的输出看起来很糟糕。

通常,您需要读取所有字节,直到到达某些终止符为止,这取决于设备。在此之前,您将需要缓冲接收到的数据。在此之前,取决于应用程序的性质,您可能无法处理请求。

答案 1 :(得分:0)

配置扫描仪,使其在每次扫描后都应添加回车符,然后才得到这样的结果

var result = serialPort.ReadLine();