我使用SerialPort接收来自手持Scanner.In加载项的文本,手持扫描仪使用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
七八九0
有时,例如:
123456
七八九0
有时,例如:
12
34
567890
这有什么问题,为什么没有规则的文本被分割成几个?我怎么能让它结合在一起,而不再被分割?
PS:我试过不同品牌的手持扫描仪,比如Datalogic PS 2430/Honeywell GHD1900,但这些问题仍然存在。
发布于 2018-08-05 02:57:58
串行端口I/O可以看作是一个流接口,也就是说,您可能不会在一个回调中接收所有的数据。
当你看到:
12
34
567890...I怀疑正在发生的情况是,您的回调被调用了三次,其中有3个Console.WriteLine调用。因此,您的输出看起来坏了。
通常,您需要读取所有字节,直到到达某个终止符为止,这取决于设备。在此之前,您需要缓冲接收到的数据。在此之前,根据应用程序的性质,您可能无法处理请求。
发布于 2018-08-05 03:08:05
配置您的扫描器,每次扫描之后,它应该添加一个回车,然后得到如下结果
var result = serialPort.ReadLine();https://stackoverflow.com/questions/51690971
复制相似问题