知识点:
1、委托是实现回调函数的一种机制
2、委托是用户自定义类型,可以当作变量一样进行传递
3、回调函数就是把一个方法(方法的地址)传递给另一个方法去执行。
需求:通过后台代码修改控件显示内容(修改控件的其他属性,方法类似)。
方法1
前台界面
后台代码及运行结果
方法2
发生异常:非主线程不能直接修改UI线程创建的控件的属性。
方法3
private void Form1_Load(object sender, EventArgs e)
{
/*
*获取或设置一个值,该值指示是否捕获对错误线程的调用,
*这些调用在调试应用程序时访问控件的 System.Windows.Forms.Control.Handle 属性。
*/
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Thread thread = new Thread(DefaultMessageMethod);
thread.Start();
}
void DefaultMessageMethod()
{
this.textBox1.Text = "Hello World";
}
方法4
使用委托
delegate void ShowDlgt();
void DefaultMessageMethod()
{
this.textBox1.Text = "Hello World";
}
private void Form1_Load(object sender, EventArgs e)
{
ShowDlgt show = new ShowDlgt(DefaultMessageMethod);
show();
}
方法4
使用回调
delegate void ShowDlgt();//定义
ShowDlgt show;//声明
void DefaultMessageMethod()
{
this.textBox1.Text = "Hello World";
}
void CFun()
{
show = new ShowDlgt(DefaultMessageMethod);//实例化回调
this.textBox1.Invoke(show);
}
private void Form1_Load(object sender, EventArgs e)
{
Thread thread = new Thread(CFun);
thread.Start();
}
方法5
给回调方法传入参数
//定义
delegate void ShowDlgt();
delegate void ShowParameterDlg(string msg);
//声明
ShowDlgt show;
ShowParameterDlg showPar;
void DefaultMessageMethod()
{
this.textBox1.Text = "Hello World";
}
void ParameterMessageMethod(string msg)
{
this.textBox1.Text = msg;
}
void CFun()
{
show = new ShowDlgt(DefaultMessageMethod);//实例化回调
this.textBox1.Invoke(show);
}
void DFun()
{
showPar = new ShowParameterDlg(ParameterMessageMethod);//实例化回调
this.textBox1.Invoke(showPar, "OK");
}
private void Form1_Load(object sender, EventArgs e)
{
//Thread thread = new Thread(CFun);
Thread thread = new Thread(DFun);
thread.Start();
}