首页 > 其他 > 详细

无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型

时间:2014-01-16 21:54:22      阅读:397      评论:0      收藏:0      [点我收藏+]
this.BeginInvoke(() =>
 {
     this.btnQuery.Enabled = false;  //禁用查询
 });

跨线程调用时,编译上面的代码将提示

bubuko.com,布布扣

对于Control.Invoke()来说,任何的代理类型都是可接受的,也就是说ThreadStart和MethodInvoker都是可以接受的类型。这样编译器反而不知道应该用哪个代理去匹配匿名函数了,导致了编译错误的发生。
知道了原因,问题就很容易解决了。我们只需要加上MethodInvoker这个wrapper就能使用匿名函数了。

Invoke(new MethodInvoker(delegate { Text = "test"; }));

或者更简单地,用Lambda表达式来解决问题:

Invoke(new MethodInvoker(() => Text = "test"));

无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型

原文:http://www.cnblogs.com/weekend001/p/3521498.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!