代码如下:private void Form1_Load(object sender, EventArgs e)
        {
            Thread thread = new Thread(conn);
            thread.Start();
        }        private void conn()
        {
            for (int i = 0; i < 10; i++)
            {
                MessageBox.Show(i.ToString());
            }
            this.Invoke(new CallBack(DoCallBack),new object[] {true});
        }        public void DoCallBack(bool isSuccess)
        {
            if (isSuccess)
        {
                //button1.Click += new EventHandler(button1_Click);//第一种方法
                button1_Click(null, null);  //第二种方法
        }
            else
            {
                MessageBox.Show("数据加载失败");
            }
        }        public delegate void CallBack(bool isSuccess);        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("测试成功");
        }我在DoCallBack中调用button1的事件为什么第一种写法不会执行,第二种可行。能不能解释一下呀

解决方案 »

  1.   

    第一种写法是把函数button1_Click注册为button1点击事件函数
    第二种写法是调用button1_Click函数
    两种写法的意义是不一样的
      

  2.   

    请搞清楚,EVENT+=是在委托链上进行添加委托,根本就不会执行实际的委托。你不可能要求一个ATM给你买瓶牛奶。
      

  3.   

    你的意思应该是想调用button1的点击事件函数(不一定是button1_Click),对吧?就是说事件函数发生改变后希望调用的函数也发生改变,是这个意思么?定义一个委托
    public delegate void clickEV(object sender, EventArgs e);
    clickEV btnclick;
    然后在load事件里面给委托赋值,并加入到事件处理
    btnclick=button1_Click;
    button1.Click+=btnclick;
    然后你就可以通过这个委托调用button1_Click函数了,好处是当你要更改事件函数时,只需要给这个委托重新赋值就可以了,你调用的函数也自动变了就