解决方案 »

  1.   

    serialPort  load 后就没有了,放到外面去
      

  2.   

    你定义一个全局的SerialPort,在DataReceive事件里直接使用全局的SerialPort试试以下代码仅供参考,未经测试
    --------------------------------------------------------------
            public SerialPort sp = null;
            private void Form2_Load(object sender, EventArgs e)
            {
                sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
                sp.Handshake = Handshake.None;
                sp.WriteTimeout = 500;
                sp.ReadTimeout = 500;
                sp.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
                sp.Open();          
            }
            private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                string indata = sp.ReadExisting();
                Console.WriteLine("Data Received:");
                Console.Write(indata);
            }
      

  3.   

    定义了一个全局的SerialPort,不行
      

  4.   

    变量的作用域的问题吧,serialPort是在Load中定义的,其他的函数根本就没有用到。
      

  5.   

    我已经serialPort移到load外面了,还是不行
      

  6.   

    肯定与什么变量作用域没关系,人家在里面已经对sender进行转换了。请检查三个问题:
    1.为什么private static void DataReceivedHandler有 static,去掉看看。
    2.Console.WriteLine("Data Received:");
                Console.Write(indata);
    是不是一闪就过了,你根本没看到,应该加一句Consolse.ReadKey(),停留一下控制台。
    3.确认COM1口真的有数据传过来,可用超级终端或串口调试助手先看看。
    4.ReceivedBytesThreshold影响事件执行,看看设小点行不行