private void buttonVoltage_Click(object sender, EventArgs e)
        {                      
            byte addr=0;
            string textstr;
            textstr = textBoxAddress.Text;
            addr = StringToHex(textstr);
            byte[] bytes=new byte[3];
            bytes[0]=addr;
            bytes[1]=0x60;
            bytes[2]=TwoNumXor(bytes[0],bytes[1]);
            try
            {
                SP.Write(bytes, 0, 3);
                MessageBox.Show("数据发送成功");
            }
            catch
            {
                MessageBox.Show("数据发送失败");
            }    
        }
上面是串口发送数据的代码,下面是串口接收数据的代码:
 private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string lStrRecv = "";
            int bytesToRead = SP.BytesToRead;
            if (SP.IsOpen )
            {
                byte[] lAryBytes = new byte[bytesToRead];
                int lIntLen = SP.Read(lAryBytes, 0, lAryBytes.Length);
                if (lIntLen > 0)
                {
                    byte[] lAryData = new byte[lIntLen];
                    for (int i = 0; i < lIntLen; i++)
                    {
                        lAryData[i] = lAryBytes[i];
                    }
                    lStrRecv = System.Text.Encoding.Default.GetString(lAryData);
                }
                this.textBoxVtest.Invoke(
                    new MethodInvoker(
                    delegate
                    {
                        this.textBoxVtest.AppendText(lStrRecv.ToUpper());
                        //this.textBoxVtest += "";
                        this.textBoxVtest.Text+= lStrRecv;
                    }));            }
        }
发送数据后应该就会触发串口接收数据private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e),可是我发送数据后,单步调试都没有跑到private void SP_DataReceived函数里,好像是根本没有触发串口的数据接收。
请高手赐教我怎么才能收到我发的数据呢?谢谢!

解决方案 »

  1.   

    把下面MessageBox这行注销一下试试呢?
     try
      {
      SP.Write(bytes, 0, 3);
      MessageBox.Show("数据发送成功");
      }
      

  2.   

    谢谢各位的建议!
    把MessageBox这行注销了也不行。
    这是串口的设置:
                       SP.Close();
                    SP.PortName = "COM1";
                    SP.ReadTimeout = -1;
                    SP.WriteTimeout = -1;
                    SP.BaudRate = 9600;
                    //SP.Parity = Parity.None;
                   // SP.StopBits = StopBits.None;
                    //SP.ReceivedBytesThreshold = 3;
                    SP.Open();
    串口打开成功了
    我应该这样循环监听串口呢?
    或者确定事件是否绑定?
      

  3.   

    你要是直接在界面上托的控件的话
    直接在serialport控件的接收事件中读串口数据即可
      

  4.   

    是直接在界面上托的控件,但是发出数据后,程序都没有进入private void SP_DataReceived函数里,这个private void SP_DataReceived应该就是接收事件了吧。
      

  5.   

    不触发,你看看是否需要设置RTSEnabled=true
      

  6.   

    是自发自收,在网上下了几个串口监视的工具,不过都不好用。不知道mervyn807你那有没有这样的工具?能否给我发一个?QQ1105871845
    谢谢!
    我试着设置下RTSEnabled=true,看好不好用
      

  7.   

    mervyn807帮我解决了问题,谢谢各位的积极帮助!