using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;namespace _2
{
    public partial class Form1 : Form
    {
          SerialPort spReceive = new SerialPort ();
        
         delegate void UpdateTextEventHandler(string text);//声明一个委托
         UpdateTextEventHandler updateText;//创建一个委托实例
        public Form1()
        {
            InitializeComponent();
            updateText = new UpdateTextEventHandler(UpdateTextBox);
           
            
            spReceive.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(spReceive_DataReceived );  
           
        }            private void Form1_Load(object sender, EventArgs e)
        {
            
        }        private void button1_Click(object sender, EventArgs e)
        {
            spReceive.PortName = "COM5";
            spReceive.BaudRate = 2400;
            spReceive.DataBits = 8;
            spReceive.StopBits = StopBits.One;
            spReceive.Parity = Parity.Even;
            //string str = "FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16";
            //byte[] data = System.Text.Encoding.ASCII.GetBytes(str );
           
             byte []data=new byte [15];
             data[0]=0xFE;
             data[1]=0xFE;
             data[2]=0xFE;
             data[3]=0x68;
             data[4]=0xAA;
             data[5]=0xAA;
             data[6]=0xAA;
             data[7]=0xAA;
             data[8]=0xAA;
             data[9]=0xAA;
             data[10]=0x68;
             data[11]=0x13;
             data[12]=0x00;
             data[13] = 0xDF;
             data[14] = 0x16;            //byte[] data = {1,2,3,4,5,6,7,8,9,10,11,12,13};
             spReceive.Open();
            spReceive.Write(data ,0,15);
             //spReceive.Write(data,0,data.Length );
             spReceive.Close();
            }
        
        public void  spReceive_DataReceived(object sender,System .IO .Ports .SerialDataReceivedEventArgs e)
       {
          byte[]readBuffer = new byte[spReceive .ReadBufferSize];
          spReceive.Read(readBuffer,0,readBuffer.Length);
          this.Invoke(updateText ,new string []{Encoding .Unicode .GetString (readBuffer )});
          
          string readString = spReceive.ReadExisting();
          this.Invoke(updateText ,new string []{readString });
       }        private void  UpdateTextBox(string text)
        {
          textBox1.Text =text.ToString(); 
            
        }
    }
}
我向串口发送一串16进制命令,但是接收不到串口的返回数据.我有两个控件,一个Button 一个TextBox 我点击Button然后textbox显示返回的数据.但是现在好像收不到数据.上面的代码是哪里出了问题?

解决方案 »

  1.   

    你在button1_Click中打开串口后,又关闭了串口。
    串口关闭了,spReceive_DataReceived怎么接收?
      

  2.   

    把spReceive.Open();
    替换成
    if(spReceive.IsOpen) spReceive.Open();把spReceive.Close();移到Form_Closed之类的方法中
      

  3.   


    错。
    改为
    if(!spReceive.IsOpen) spReceive.Open();
      

  4.   

    谢谢"xky96"我把spReceive.Close();移到Form_Closed之类的方法中就可以正常的接收到数据了,但是TextBox还是不能显示接收到的数据