c# - 为什么来自 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,但这些问题仍然存在。
解决方案
串行端口 I/O 可以被认为是一个流接口,即您可能不会在单个回调中接收到所有数据。
当你看到:
12
34
567890
...我怀疑正在发生的事情是你的回调被 3 次调用了 3 次Console.WriteLine
。因此,您的输出看起来很糟糕。
通常,您需要读取所有字节,直到达到某个终止符,这取决于设备。在此之前,您需要缓冲收到的数据。在此之前,根据应用程序的性质,您可能无法处理请求。
推荐阅读
- python - 使用 MDDropdownMenu 时更改按钮文本的问题
- r - 如何在 mutate_if 中应用 ifelse 语句
- elasticsearch - 是否可以使用 asciifolding 进行术语查询?
- python - RandomUnderSampler' 对象没有属性 'fit_resample'
- python - 如何使用 seaborn 或 matplotlib 库准备 2 行 5 列网格以在一个图中绘制 10 个箱线图?
- reactjs - 关于从 switch 函数中的表单获取数据的问题
- javascript - 根据滚动速度,来自 scrollTop() 的值不精确
- c# - 按下鼠标1时播放声音,未按下时停止声音
- java - 检查扩展 jTextFormattedField 是否为空
- c# - 简化扩展方法(组合)?