第一次接触串口通信
我在上位机发送一个指令,然后下位机会返回一个信息。然后上位机根据信息判断。
public void FICCard_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (ComPort.Closing)//如果正在关闭,则退出监听
            {
                return;
            }
            try
            {
                this.Invoke((EventHandler)(delegate
                {
                    ComPort.Listening = true;
                    string buf = ComPort.getInstance().ReadExisting();
                    result = buf.Replace("\r", "\r\n");
                }));
            }
            finally
            {
                ComPort.Listening = false;
            }           
        }
 private void myButton1_Click(object sender, EventArgs e)
        {        
            ComPort.sendData(Order.ic_instruction.ic_connect_order);
            if (result == "OK")
            {
                textBox2.Text = "读卡器连接成功";
            }
            else
            {
                textBox2.Text = "读卡器连接失败,请检查串口。";
            }
            result = "";
        }
网上找的资料,监听是开了另一个线程,当我点击button事件,发送同时后台也在接收,所以后面的判断都是旧的数据,再点一次才是上一次的数据。
要怎么改才能让信息及时判断呢。不要写在接收事件里,因为有几个按钮,发送不同的数据。
请教各位大牛们。c#串口同步

解决方案 »

  1.   

    我也是新手,也正在做类似的东西,有个想法。你可以是每次发送的时候打开串口,收到数据后或者是超时没收到数据就引发错误,关闭串口,不要用一直打开串口的方法。在button事件里打开串口,Receive事件里收完后关闭串口,同时也清除缓冲区内容,这些方法在serialPort的类里面都有,这样你就能正确的收到了对应发送的数据。
      

  2.   

    ComPort.DiscardOutBuffer();
    ComPort.DiscardInBuffer();
    ComPort.sendData(Order.ic_instruction.ic_connect_order);
    .....