我的思路:
事件发送类 
//声明事件委托
    public delegate void AddUserEventHandle(object sender, AddUserEventArgs e);
//事件触发方法,部分代码
  if (!UserList.ContainsKey(a[0]))
                        {
                            //将用户信息临时保存到hashtablez中
                            UserList.Add(a[0], s);
                            //此处出发事件,通知服务器界面增加一个用户数据;
                            mAddUserEventArgs.UserName = a[0];
                            mAddUserEventArgs.IpAddress = a[1];
                            OnAddUser(mAddUserEventArgs);
                            //启动线程
                            Thread t = new Thread(new ParameterizedThreadStart(AcceptOneSocket));
                            t.Start(s);
                        }
//事件调用方法
 protected virtual void OnAddUser(AddUserEventArgs e)
        {
            if (eAddUserEvent != null)
            {
                eAddUserEvent(this, e);
            }
        }
事件接收类
//构造函数中订阅事件
 public FrmServer()
        {
            InitializeComponent();
            mQQTCPListner = new QQTCPListner();
            mQQTCPListner.eAddUserEvent += new AddUserEventHandle(mQQTCPListner_eAddUserEvent);
        }
//事件处理方法
  void mQQTCPListner_eAddUserEvent(object sender, AddUserEventArgs e)
        {
             item = new ListViewItem();
            //item
            item.Text = "选项一"; //显示文字
            item.Tag = "001";     //设置tag 用于隐藏信息 比如主键
            // item.ImageIndex = 0; //对应在imagelist中图片索引
            item.SubItems.Add(e.UserName);
            item.SubItems.Add(e.IpAddress);
            lvwUserList.Items.Add(item); //将列表项加入到ListView中
            
        }问题:程序运行到事件调用方法中eAddUserEvent 对象为空;可调试时明明mQQTCPListner.eAddUserEvent += new AddUserEventHandle(mQQTCPListner_eAddUserEvent);有调用啊,什么问题啊?

解决方案 »

  1.   

    把你的所有关于事件.eAddUserEvent 的代码都弄上来看看!
      

  2.   

      //声明事件委托
        public delegate void AddUserEventHandle(object sender, AddUserEventArgs e);
        //事件数据类
        public class AddUserEventArgs: EventArgs
        {
           public string UserName
            {
                get;
                set;
            }
           public string IpAddress
            {
                get;
                set;
            }
        }
    //触发事件方法
     protected virtual void OnAddUser(AddUserEventArgs e)
            {
                if (eAddUserEvent != null)
                {
                    eAddUserEvent(this, e);
                }
            }  //构造函数
            public QQTCPListner()
            {
                UserList = new Hashtable();
                mIPAddress = Dns.GetHostAddresses("127.0.0.1")[0];
                mIPEndPoint = new IPEndPoint(mIPAddress,9001);
                QQTCPServer = new TcpListener(mIPEndPoint);
                mAddUserEventArgs = new AddUserEventArgs();
               
            }
            //启动监听
            public void StartServer()
            {
               
                string fn = "StartServer";
                LoggerUtil.WriteLogIn(unit, fn);
                try
                {
                    QQTCPServer.Start();
                    byte[] b = new byte[1024];
                    string temp = string.Empty;
                    string[] a;
                    while (true)
                    {
                        Socket s = QQTCPServer.AcceptSocket();
                        s.Receive(b);
                        temp = Encoding.GetEncoding("gb2312").GetString(b);
                        //除去末尾的“\0”
                       temp = temp.TrimEnd("\0".ToCharArray());
                        if (!string.IsNullOrEmpty(temp))
                        {
                            //a = temp.Split("||".ToCharArray());
                            a = Regex.Split(temp, @"\|\|", RegexOptions.IgnoreCase);
                            // 判断该用户是否存在于UserList中
                            if (!UserList.ContainsKey(a[0]))
                            {
                                //将用户信息临时保存到hashtablez中
                                UserList.Add(a[0], s);
                                //此处出发事件,通知服务器界面增加一个用户数据;
                                mAddUserEventArgs.UserName = a[0];
                                mAddUserEventArgs.IpAddress = a[1];
                                OnAddUser(mAddUserEventArgs);
                                //启动线程
                                Thread t = new Thread(new ParameterizedThreadStart(AcceptOneSocket));
                                t.Start(s);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {                LoggerUtil.WriteLogException(unit, fn,ex );
                    throw ex;
                }////事件订阅类,在一个Form里面
      private void Form1_Load(object sender, EventArgs e)
            {
                //监听事件
                mQQTCPListner.eAddUserEvent += new AddUserEventHandle(mQQTCPListner_eAddUserEvent);
                SetListView();
               
            }        void mQQTCPListner_eAddUserEvent(object sender, AddUserEventArgs e)
            {
                 item = new ListViewItem();
                //item
                item.Text = "选项一"; //显示文字
                item.Tag = "001";     //设置tag 用于隐藏信息 比如主键
                // item.ImageIndex = 0; //对应在imagelist中图片索引
                item.SubItems.Add(e.UserName);
                item.SubItems.Add(e.IpAddress);
                lvwUserList.Items.Add(item); //将列表项加入到ListView中
                
            }