如何只注册一个事件???
zTaskParent.TaskEvent += new TaskEventHandler(tp_TaskEvent);
这里不能用=只能用+=啊,现在出现多次注册同一事件方法的情况,怎么办?
也就是怎么样才能判断这个事件已经有注册了?

解决方案 »

  1.   

    委托的基类就是多播的,所以可以多次注册,可以每次先REMOVE掉事件,即使之前没有注册时间,也不会出错
    zTaskParent.TaskEvent -= new TaskEventHandler(tp_TaskEvent);
    zTaskParent.TaskEvent += new TaskEventHandler(tp_TaskEvent);
      

  2.   


            static void Main(string[] args)
            {
                MyClass mc = new MyClass();
                mc.Handler += (sender, e) => { Console.WriteLine("1"); };
                mc.Handler += (sender, e) => { Console.WriteLine("2"); };
                mc.Handler += (sender, e) => { Console.WriteLine("3"); };
                mc.Test();
            }        class MyClass
            {
                private System.ComponentModel.EventHandlerList ehList;            public MyClass()
                {
                    ehList = new EventHandlerList();
                }            public event EventHandler Handler
                {
                    add
                    {
                        if (ehList["ojlovecd"] == null)
                            ehList.AddHandler("ojlovecd", value);
                    }
                    remove
                    {
                        ehList.RemoveHandler("ojlovecd", value);
                    }
                }            public void Test()
                {
                    Delegate d = ehList["ojlovecd"];
                    if (d != null)
                        d.DynamicInvoke(null, null);            }
            }
      

  3.   


     private void Form1_Load(object sender, EventArgs e)
            {            this.button1.GetType().GetEvent("Click").AddEventHandler(this.button1, new EventHandler(button1_Click));
               
                
                
            }        void button1_Click(object sender, EventArgs e)
            {
                this.button1.GetType().GetEvent("Click").RemoveEventHandler(this.button1, new EventHandler(button1_Click));
                MessageBox.Show("ss");
               
            }