对你的设备不是很明白,但你这里我注意到有两个地方。
if (sp.IsOpen == false)
{
sp.Open();
}为什么会用到两次?还有就是你在发送接收完数据有没有对数据清空?

解决方案 »

  1.   

    用if(sp.isopen==false)是因为,我搞不清楚端口是否打开,没打开,就打开,以免报错;楼上的所指的数据精空,是指:            sp.DiscardInBuffer();sp.DiscardOutBuffer();这两个方法吗?或者是其它什么方法;好像没用,我试过!
      

  2.   

    我现在把程序改成:
    byte[] wData =new byte[sp.readbuffersize];
    System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                sp.Read(wData, 0, sp.readbuffersize);
                sysStatus = "receOk";
            }
        }
    }这样读,有什么问题吗?我觉得这样读,应该就干净了,上边的读数据有什么问题吗?private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                sp.Read(wData, 0, sp.ReadBufferSize);
                sp.DiscardInBuffer();
                sp.Read(wData2, 0, sp.ReadBufferSize);
                sp.Read(wData3, 0, sp.ReadBufferSize);
                string tt = ":";
                string bb = ":";
                string cc = ":";
                foreach (byte aa in wData)
                {
                    tt += aa.ToString();
                }
                foreach (byte aa in wData2)
                {
                    bb += aa.ToString();
                }
                foreach (byte aa in wData3)
                {
                    cc += aa.ToString();
                }
                tb1.Text += tt;
                label2.Text += bb;
                label3.Text += cc;
                sysStatus = "receOk";
            }
    我连续读三次都有数据,真是怪死了,我搞不明白了,太郁闷啦!