serialport控件放在了主窗体,但是我想在其它子窗体中也能接受到下位机传过来的数据,不知道怎么做,我试了很多方法但是都不行,这是我第一次接触serialport控件,各位高人指点下,给点提示我?
接受数据
 public void RData()
        {
            serialPort1.DiscardOutBuffer();
            Thread.Sleep(40);
            int by = serialPort1.BytesToRead;
            byte[] bytes = new byte[by];
            serialPort1.Read(bytes, 0, bytes.Length);
}Serialport实时接受串口放送数据事件中调用
 private delegate void delegatesp();//定义委托
        delegatesp Rd;
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                Rd = new delegatesp(RData);
                Invoke(Rd, null);
            }
            catch { };
        }但不知在其它子窗体中如何调用这个事件?
各位大侠给点提示吧,谢了!

解决方案 »

  1.   

    使用Invoke,或者委托,传递参数即可。或者写一个静态的公开属性,让所有的窗口定时访问这个属性。
      

  2.   

    我博客中有些这方面的例子。
    http://blog.csdn.net/wuyazhe/category/695097.aspx
      

  3.   

    From主窗体中的判断代码:
    int by = serialPort1.BytesToRead;
                byte[] bytes = new byte[by];
                serialPort1.Read(bytes, 0, bytes.Length);
                #region
                for (int i = 0; i < by; i++)
                {
                    if (bytes[i] == 0xA8)
                    {
                        switch (bytes[i + 3])
                        {
                            case 0x11: { MessageBox.Show("时间设置成功!"); break; }
                            case 0x12: { MessageBox.Show("日期设置成功!"); break; }
                            case 0x32: { MessageBox.Show("没有记录!"); break; }
                            case 0x38: { MessageBox.Show("删除完毕!"); break; }
                            case 0x40: { MessageBox.Show("设置禁行时段成功!"); break; }
                            case 0x41: { MessageBox.Show("取消禁行时段成功!"); break; }
                            case 0x50: { MessageBox.Show("修改成功!"); break; }
                            case 0x51: { MessageBox.Show("设置成功!"); break; }
                            case 0x5A: { MessageBox.Show("操作成功!"); break; }
                            case 0x5E: { MessageBox.Show("已恢复设置!"); break; }
                            case 0x5F: { MessageBox.Show("密码错误!"); break; }
    }
    }
    }
    我所有的子窗体中发送命令后,都是在主窗体中判断
    感觉这样不好,如果没有很多下位机,如果命令没发送成功,也无法立即知道From2子窗体
    Button事件
     byte[] bytes = new byte[6];
                bytes[0] = 0xdd;
                bytes[1] = 0xdc;
                bytes[2] = 0x22;            
                bytes[3] = 0x74;
                bytes[4] = 0xAA          
                bytes[5] = 0x22;
                m.SendData(bytes);我想在这个命令一发送出去后就知道,下位机有没有收到。
      

  4.   

    我想在这个命令一发送出去后就知道,下位机有没有收到。我以前写某个软件时候也考虑这样,所以发命令和数据分析分开2块,发命令就死等应答,超时退出或收到应答正常退出。死等之前先注销DataReceived事件,退出之前重新注册。避免抢数据。
      

  5.   

    我这儿有demo
    你的 Email