首页 > 解决方案 > 为什么来自 SerialPort 的文本会分成几个部分?

问题描述

我使用串行端口从手持式扫描仪接收文本。此外,手持式扫描仪使用 USB 端口与计算机连接,但其驱动程序会将其连接到虚拟串行端口。

所以我使用这段代码来接收文本:

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

标签: c#

解决方案


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

当你看到:

12
34
567890

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

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


推荐阅读