C#跨线程调用窗体控件

在使用多线程可能会碰到跨线程调用 Control的属性与方法,但这时通常会报"Cross-thread operation not valid"的异常,解决方法也简单,可以看下 参考1. 大部分的方法是建立一个delegate,然后判断InvokeRequired并新建一个delegate, 但这种方法比较烦琐,多出了比较多的步骤.

后来google时,找到了参考2. 里面使用了匿名方法,有效的减少了代码量,大家可以看看

private void UpdateUI(string txt, Control ctr){
 if(ctr.InvokeRequired){
  ctr.BeginInvoke((MethodInvoke)delegate{
     UpdateUI(txt,ctr);
    });
  return;
 }
 ctr.Text = txt;
}
当然,这样,至少不需要另外去新建一个 delegate了,而且非常直观.


}

 

reference:
1. C#跨线程调用窗体控件 http://hi.baidu.com/supko/blog/item/67ba6b391bf4f3f9b311c7ce.html
2.  MethodInvoker + Anonymous Methods = tEh r0x0r http://www.csharper.net/blog/methodinvoker___anonymous_methods___teh_r0x0r.aspx>http://www.csharper.net/blog/methodinvoker___anonymous_methods___teh_r0x0r.aspx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值