c# winform委托的使用

可参考http://bbs.csdn.net/topics/390377875中使用new Action<>的使用方式,替代delegate的申明。

public delegate void MyInvokeWarn(bool para);  

public delegate void MyInvoke(Control control,string str);

//单个参数

 public void enableWarn1(bool para)        

{            

  if (panelWarn1.InvokeRequired)            

  {                

    MyInvokeWarn _myinvoke = new MyInvokeWarn(enableWarn1);                

    panelWarn1.Invoke(_myinvoke, new object[] { para });            

  }            

  else            

  {                

    panelWarn1.Visible = para;            

  }        

}

//两个参数

 public void printMsg(Control control,string msg)        

{            

    if (control.InvokeRequired)            

    {                

       MyInvoke _myInvoke = new MyInvoke((ct, v) => { ct.Text = v; });                

       control.Invoke(_myInvoke,new object[] {control,msg});            

     }            

    else            

    {                

       control.Text = msg;            

     }        

}

 

在Winform开发中,如果在多线程中操作某一个控件的赋值的时候

//先声明一个委托

public delegate void SetControlTextDelegate(Control control);

//设置控件的方法

public void SetControlText(Control control, string value)

{    

  if (control.InvokeRequired)    

  {        

  //使用委托赋值        

     control.Invoke(new SetControlTextDelegate((ct, v) => { ct.Text = v; }), new object[] { control, value });     }    

  else    

  {        

     control.Text = value;    

  }

}

 

posted on 2015-04-12 19:11  xihong  阅读(3129)  评论(0编辑  收藏  举报

导航