代码如下: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的事件为什么第一种写法不会执行,第二种可行。能不能解释一下呀
{
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的事件为什么第一种写法不会执行,第二种可行。能不能解释一下呀
第二种写法是调用button1_Click函数
两种写法的意义是不一样的
public delegate void clickEV(object sender, EventArgs e);
clickEV btnclick;
然后在load事件里面给委托赋值,并加入到事件处理
btnclick=button1_Click;
button1.Click+=btnclick;
然后你就可以通过这个委托调用button1_Click函数了,好处是当你要更改事件函数时,只需要给这个委托重新赋值就可以了,你调用的函数也自动变了就