我的SerialPort想实现接受不同长度的数据,假如一组数据是100个字节,第二组数据是10个字节,第三组数据是20个字节
帧头和帧尾分别为5A A5 和 A5 5A
LDSerialPort.ReceivedBytesThreshold 是设置缓冲区里面的数据达到多少时产生事件
而VC++里面的MSCOMM控件中有一个函数 GetCommEvent() 事件值为2表示接收缓冲区内有字符
但是C#的SerialPort里面没有这个函数
这样的话,实现我上面的目的是不是只能通过把
LDSerialPort.ReceivedBytesThreshold = 1 每接收一个字节就触发一次事件
然后通过判断帧头和帧尾来判断是不是接收完了一帧数据了呢?
请大家指教哈!

解决方案 »

  1.   

    这个问题,我头疼过,代码如下,其实很简单,比MSCOMM控件简单多了            for (int i = 0; i < response.Length; i++)
                {
                    response[i] = (byte)(sp.ReadByte());
                }
    ReadByte()方法,从缓冲区取一个字节
    sp 是SerialPort实例,response数组 存储接收到的数据.你可以把这段写到函数里,response由ref参数传入.给个多长的response,就给你读回多长去.
      

  2.   

    response 是接收缓冲区数据的数组吧
      

  3.   

    是啊,噢,可能说法不精确
    把这段写到函数里里后,就不用管它了,看起来从response取得数据就行了,有点透明.
      

  4.   

    我还是不太明白,SerialPort的DataReceived事件由什么来触发呢?
    也就是说DataReceived事件是缓冲区里面存储了多少字节才会被触发呢?
    zzlfe能不能给出更详细的代码啊?
      

  5.   

    不要用SerialPort的DataReceived事件,有时会收不到数据,做一个同步线程,循环监听串口