c#串口通信有关问题

c#串口通信问题
新手学习用C#实现串口通信,采用李全江 visual C# .NET串口通信及测控应用典型实例,按照实例 做p35 4.利用serialport控件实现PC双串口互通信 开始自己做 程序不能正常显示结果。完全按 书上的例程 改一下变量 也一样不能正确显示,但是运行光盘上的例程 却可以正确显示,不知道原因出在哪儿?对比例程  基本上是一样,只是对应的控件的名称做了改变,请高手赐教,谢谢!
这是我的程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;

namespace Pc
{
    public partial class Form1 : Form
    {
        string data;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 9600;
            serialPort1.Open();
            serialPort2.PortName = "COM2";
            serialPort2.BaudRate = 9600;
            serialPort2.Open();
        }
        private void DisplayText(object sender, EventArgs e)
        {

            txBxDis.Text= txBxDis.Text + data;
        }

        private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            data = serialPort2.ReadExisting();
            this.Invoke(new EventHandler(DisplayText));
        }

        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            serialPort2.Close();
            Close();
        }

        private void btSend_Click(object sender, EventArgs e)
        {
            string outdata = txBxSend.Text;
            if (outdata == "")
            {
                MessageBox.Show("发送的数据不能为空!", "");
            }
            serialPort1.Write(outdata);
        }
    }
}

下面是例程

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;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string outdata = textBox2.Text;
            if (outdata == "")
            {
                MessageBox.Show("发送的数据不能为空!", "");
            }
            serialPort1.Write(outdata);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            serialPort2.Close();
            Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 9600;
            serialPort1.Open();
            serialPort2.PortName = "COM2";
            serialPort2.BaudRate = 9600;
            serialPort2.Open();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            string data;
            data = serialPort2.ReadExisting() ;
            textBox1.Text = textBox1.Text + data;
        }
    }
}


------解决思路----------------------
using System.IO.Ports;是不是得加?
------解决思路----------------------
  string data;这个变量应该放到最外层,局部变量
------解决思路----------------------
"程序不能正常显示结果",是怎么个不能正常显示?完全不能显示还是显示的数据与发送的不一致。

LZ你这个是实现的同个计算机上两个串口的通信,“COM1”和“COM2”是虚拟的串口还是物理串口?
如果是物理串口,连线了没?要2、3口交叉线相连。
------解决思路----------------------
我学习串口通信也是从这本书入门的,查看下SerialPort的DataReceived事件是否已绑定
------解决思路----------------------
引用:
谢谢 我用的是虚拟串口 程序运行可以显示界面 但是不能显示发送和接收字符


那你得看下虚拟串口里“COM1”和“COM2”是不是相连的,如果不是相连,二者无法通信的
------解决思路----------------------
引用:
引用:引用:非常感谢 加串口的时候是成对加的 应该是相连的 而且用例程是可以实现发送和显示接收功能的

怀疑是你没绑定事件。。。。
要单独添加代码绑定吗 ?


在设计窗口里,找到控件的属性窗口,在事件那边看下事件有无绑定
我一开始接触C#的时候也是忘记绑定事件,当时啥都不懂