C#之跨线程访问控件【事件与委托】
vs2010中,默认是不允许跨线程访问窗体控件的,而在执行某些费时任务时,往往希望显示一个进度条,使用委托是一个比较简单的解决办法。
public partial class Form1 : Form
{
public delegate void Refresh(int proIndex);
public Refresh refreshPro=new Refresh(ShowProgress);
public void ShowProgress(int proIndex)
}
在其它线程只需执行(form1是Form1 的实例)
form1.Invoke(form1.refreshPro, new Object[] { proIndex });
事件可谓是委托的一个实例
也可以给事件传递参数
public class DataArgs:EventArgs
{
//添加一个参数data
private string data;
public string Data
{
get{return data;}
set{data=value;}
}
}
public class DataClass
{
public delegate void DealDataEventHandler(object sender,DataArgs args)
public event DealDataEventHandler dealDataEvent;
在其它方法的代码体中
public void DealData()
{
if(dealDataEvent!=null)
{
DataArgs dataArgs=new DataArgs();
dataArgs.Data="hello";
dealDataEvent(this,dataArgs);
}
}
public class PrintData
{
public void Print(object sender,DataArgs dataArgs)
{
Console.WriteLine("{0}",args.Data);
}
}
调用示例:
PrintData printData=new PrintData();
DataClass dataClass=new DataClass();
dataClass.dealDataEvent+=new DataClass.DealDataEventHandler(printData.print);
dataClass.DealData();
浙公网安备 33010602011771号