C#中的委托相当于C中的函数指针,可以将一个函数作为参数进行传递;
1. 定义private delegate void WeiTuo(string str)
2. 声明:WeiTuo wt;
3. 实例化: wt=new WeiTuo(fangfa1);
Shiyong(wt);//使用
Private void fangfa1(string text)
{
textBox1.Text=text;
}
Private void Shiyong(WeiTuo wt)
{
String s= “123423”;
wt(s);
}
仅这种方法时,使用多线程会造成跨线程访问问题,因此要使用
Control.CheckForIllegalCrossThreadCalls= false;
来禁止检查是否跨线程,但这样会造成安全隐患;
所以可以使用回调来实现跨线程访问控件
C#中的回调,在访问label、textBox等控件时常用
1. 定义: private delegate void CallBackCeShi(string str);
2. 声明:CallBackCeShi cbcs;
3. 实例化:cbcs=new CallBackCeShi(fangfa);
Private void writeToBox()
{
textbox.Invoke(cbcs,”这是回调”);
}
Private void fangfa(string str)
{
textBox1.Text=str;
}
4. 多线程:Thread th=new Thread(writeToBox);
Th.Start();