我写了个SerialPort接受的例子           SerialPort Sport = new SerialPort();            //SerialPort实例参数的设置
            Sport.PortName = "COM1";
            Sport.BaudRate = 9600;
            Sport.Parity = Parity.None;
            Sport.DataBits = 8;
            Sport.StopBits = StopBits.One;
            Sport.ReadBufferSize = 4096;        private void button3_Click(object sender, EventArgs e)
        {
            //打开串口
            if (Sport.IsOpen == false)
            {
                Sport.Open();
            }            byte[] bytesSend = System.Text.Encoding.Default.GetBytes("测试");
            Sport.Write(bytesSend, 0, bytesSend.Length);
            MessageBox.Show("发送串口信息成功");
            ReceiveData(Sport);
        }        //开启接收数据线程
        private void ReceiveData(SerialPort serialPort)
        {
            //异步接收数据线程
            Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(AsyReceiveData));
            threadReceiveSub.Start(serialPort);
        }        //异步读取
        private void AsyReceiveData(object serialPortobj)
        {
            SerialPort serialport = (SerialPort)serialPortobj;
            //System.Threading.Thread.Sleep(1000);
            //MessageBox.Show(serialport.ReadExisting());
            MessageBox.Show(serialport.ReadExisting());
            serialport.Close();
        }我在后面接收的时候,程序弹出的对话框没有数据(就是没接收到数据)
请教哪位有什么问题??

解决方案 »

  1.   

    serialport.ReadExisting()????你这读的是什么?
     byte[] data = new byte[port.BytesToRead];// port.Read(data, 0, data.Length); 其实你如果测试可以直接,响应这个DataReceived事件来完成
      

  2.   

    你这个...每来一个消息就启动个线程...每次MessageBox都是show最后那个回车换行...
      

  3.   


    呵呵,楼主为什么不用串口的消息触发事件呢?
    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                if (sender.GetType() != typeof(System.IO.Ports.SerialPort))
                {
                    return;
                }
                try
                {
                    //调用委托处理收到的数据.
                    this.Invoke(new EventHandler(AddReceive));
                }
      

  4.   

    当然也可能是因为根本没有收到数据.可以用serialPort1_DataReceived调试一下了.
      

  5.   


    你说的对,那如果我要show下面这个测试数据
    “byte[] bytesSend = System.Text.Encoding.Default.GetBytes("测试");”
    我在最后那个读该怎么读呢?
      

  6.   


    这个代码写了以后,程序没跑到这里来
    晕了。代表COM1端口根本没接受到数据