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

请教串口接收问题
写了一个串口接收程序,功能就是当串口来数据时会将数据通过invoke显示到label控件中。我给串口不停的发送一个字符串,当停止发送数据时,仍然有这个字符串接收到,这是为什么呢?有没有办法停止发送了就不再接收之前的数据?

void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {

            serialReadString = String.Empty;
            serialReadString = sp.ReadLine();
            MessageBox.Show(serialReadString);
            label35.BeginInvoke(new System.EventHandler(ax),serialReadString);
        }
停止发送后,仍然不停有对话框弹出,显示这串字符串,但是串口监听软件看不到有字符串,
------解决方案--------------------
关闭清除后,再将事件移除

 private SerialPort serialPort = new SerialPort();
 this.serialPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
 
移除

 this.serialPort.DataReceived -= new SerialDataReceivedEventHandler(port_DataReceived);

------解决方案--------------------
引用:
引用:3楼的方法可以,还有种就是加个标识符
当你停止发送时,设置一个标识符bool stop=true;
在你的接收部分就判断这个标识符,如果stop==true,就不要处理接收到的数据
C# code?12345if(!stop){       MessageBox.Show(serialReadString);       lab……


就是说你停止发送后,还是有别的数据要接收?但是不想接收前面的数据?
额,不过奇怪的是,你都停止发送指令了,为什么之前的数据还会发送给你呢。
不知道你接收到的数据有没有特征,如果两种时刻的数据是有各自特点的,那你可以判断,停止发送后,之前的数据即使接收到了也不在label显示