日期:2014-05-20  浏览次数:21229 次

c#读取串口引发两次DataReceived事件
最近给公司做一个项目,用到MICROSCAN的条码采集器,是用串口进行通信的。但每次读取条码如果成功(13位条码)就会激发两次DataReceived事件,并且将条码拆成两部分,分别是前8位一部分,后5位一部分。serialPort1的主要设置属性如下:
DataBits=7;
Parity=Even;
ReceivedBytesThreshold=9;
其余皆默认。

DataReceived主要代码如下:
delegate   void   HandleSerial(string   text);

private   void   serialPort1_DataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgs   e)
{
        HandleSerial   abc=new   HandleSerial(addItems);
        this.Invoke(abc,serialPort1.ReadExisting());
}

private   void   addItems(string   items)
{
        this.listBox1.Items.Add(items);
}

------解决方案--------------------
串口进行通信 本来 就是 这样的
一段 数据有 可能 分几次 收到
条码采集器 可以 设置 结尾 +回车符
你可以 根据 回车符判断
serialPort1_DataReceived 的数据
先写入 buff
每次收到的 累加起来 用 结束符 分开

有些 设备 没结束符的
我是用 时间 来 判断的
收到后 如果在0.1秒之内 还有 数据收到
就合起来