自学C#一段时间了,想开发个小程序(串口通讯)。现在碰到了一些问题,向大侠们请教下。工程里面有主窗口   MainForm.cs        // 一个串口调试的界面,显示发送和接收的数据子对话框 FileForm.cs        // 文件操作,选择文件后 打开文件 将文件分成N包数据。点击升级后发送串口数据升级子对话框 SetForm.cs         // 做一些串口的设置串口类   Justio.cs          // 网上下载的一个串口类,根据网上的修改为 线程不断读串口,有数据来的话触发事件现在问题 外面数据来了,触发了读串口事件后,我该如何 将有用数据(截获一包完整的数据)发送给 主窗口,让主窗口显示接收到的数据。或者将有用的数据发送给 子对话框,让子对话框接收数据,并且解析处理。

解决方案 »

  1.   

    Justio.cs :        public delegate void ShowPacketHandler(object o);
            public event ShowPacketHandler ShowPacket;
            收包后:         if(ShowPacket!=null) ShowPacket(yourData);类实例化时:
     Justio j = new Justio();
     j.ShowPacket += new ShowPacketHandler(Form3_ShowPacket);void Form3_ShowPacket(object o)
    {
    //...
    }
      

  2.   

    用事件可以![align=center]*************************************************
    本内容使用CSDN小秘书回复
    每天回帖即可得10分可用分!
    *************************************************[/align]
      

  3.   

    呵呵。非常感谢。可能还没说清楚的我贴代码吧。。
    JustinIO.cs    public delegate void ReadEventHandler(object sender, byte[] Buffer);    class CommPort
        {
            // 事件的声明      
             public event ReadEventHandler ReadEvent;        private void OnReadEvent(byte[] Buffer)
            {
                if (ReadEvent != null)
                {
                    ReadEvent(this, Buffer);
                }
            }
            // 注意打开端口的时候开的一个新线程,该线程不断读取串口,判断串口是否有数据,如果有数据来 触发OnReadEvent事件。
            
            private void Execut()
            {
                while (Done)
                {
                    byte[] Buffer = this.Read(128);
                    if (Buffer.Length > 0)
                    {
                        OnReadEvent(Buffer);
                    }
                }
            }
            public void Open()
            {
                
                ...
                Thread th = new Thread(new ThreadStart(Execut));
                th.Start();           //问题二 : 线程是何时关闭的?需要关闭不
            }        public void OnRead(object sender, byte[] Buffer)
            {
                // 这里是我的事件处理,当串口数据来了的话,我在这里分析取出 按照协议来的完整数据。
                // 然后我将取出来的完整数据,发给MainForm 和FileForm
                // 在VC中我们可以发送一个消息给 MainForm 或 FileForm,而在VC里面我该如何呢?
            }    }
    MainForm.cs
        
           PortSet portSettings = new PortSet();                      //  串口参数设置
            FileSet fileSettings = new FileSet();                      //  升级文件
            static JustinIO.CommPort ComPort = new JustinIO.CommPort();//        ComPort.ReadEvent += new ReadEventHandler(ComPort.OnRead); //
           ComPort.Open() // 打开串口  
      

  4.   

    呵呵。。我将串口接收事件处理放在了 Justio 类中了。。现在放在MainForm类里面,这下简化了。