有的可以直接用“lambda 表达式”作为委托参数,但有的却不行,为什么呢? label1.Invoke(n => { label1.Text = n.ToString(); }, i); //***出现错误***这里要求无参的改为label1.Invoke(()=>{});应该没错 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为 Delegate 和 MulticastDelegate 本身都是 abstract 的,实际使用时必须有一个具体的委托继承自它们才能new。前两个例子里面方法的参数都是具体的委托类型,所以编译器可以支持自动new那个类型的委托,就能够直接写lambda。而Invoke要求的参数是 Delegate,你给lambda编译器没法知道要转换成哪一个具体类型的委托,就没法自动帮忙new了,所以必须自己指定好具体的委托类型。一般调用Invoke都是 .Invoke(new Action(() => ...)); 这样用Action这个具体的委托来封装lambda。 也可以用强制转换,让编译器有机会推导出具体类型。label1.Invoke((Action<int>)(n => { label1.Text = n.ToString(); }), i); 大家好,我有个关于泛型的问题,大家帮下忙,谢谢 C# 如何将jpeg文件转换为PDF文件 C# 怎么用byte画图 比如说我要划个“尾”字 请问控件集合的问题 C#后台代码获取前台aspx中<img>中width值 如何实现CheckBox中选中后框内的颜色变色 Access数据库加密后,无法访问! 插入表中 已添加项。字典中的关键字:“RegEx”所添加的关键字:“RegEx” 更改数据库中某表的表名的SQL语句是什么? VS、.Net Compact Framwork、 SQLCE、WinCE之间的版本关系 wpf 如何获取集合类中的某一元素
也可以用强制转换,让编译器有机会推导出具体类型。
label1.Invoke((Action<int>)(n => { label1.Text = n.ToString(); }), i);