日期:2014-05-17  浏览次数:20978 次

c# 串口事件
用 System.IO.Ports.SerialPort()串口类进行编程,请问serialPort_DataReceived()事件是怎么触发的?是接收到一个字节数据后就立即触发还是接收完一帧数据才触发?

------解决方案--------------------
我只会用不明触发原理
SerialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(SerialPortDataReceived);        /// <summary>
        /// 接收数据事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void SerialPortDataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            //函数
        }

------解决方案--------------------
我记得 它里面 有个 ReceivedBytesThreshold 什么阀值的 设置 多少个字节 触发一次的 你网上 找一下  很多的  是在不行我这里 也有程序   
ReceivedBytesThreshold
Gets or sets the number of bytes in the internal input buffer before a DataReceived event occurs.
------解决方案--------------------
只要有数据只触发··不管数据的多少·或者完整不完整···

引用:
用 System.IO.Ports.SerialPort()串口类进行编程,请问serialPort_DataReceived()事件是怎么触发的?是接收到一个字节数据后就立即触发还是接收完一帧数据才触发?

------解决方案--------------------
引用:
用 System.IO.Ports.SerialPort()串口类进行编程,请问serialPort_DataReceived()事件是怎么触发的?是接收到一个字节数据后就立即触发还是接收完一帧数据才触发?


这个不一定的,你把接收到得数据打印出来就可以看到了,毫无规律,基本 有数据来就会触发
------解决方案--------------------
接收到就会触发。
你需要判断数据的头和尾,如地址,校验码。然后将每条数据分割开来,进行处理。
------解决方案--------------------
http://www.cnblogs.com/JimmyZhang/archive/2008/09/07/1286300.html

你看看这个的博客吧,这个博客上讲的很清楚,非常不错,它分了5个部分去讲,你仔细看看,就应该能帮你解决问题
------解决方案--------------------
SerialPort控件有个ReceiveBytesThreshold属性可以设置DataReceived事件触发前输入缓冲区的字节数,默认是1,就是接收到一个字节,就会触发DataReceived事件