无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型
2014-01-15 20:53
302 查看
this.BeginInvoke(() => { this.btnQuery.Enabled = false; //禁用查询 });
跨线程调用时,编译上面的代码将提示
对于Control.Invoke()来说,任何的代理类型都是可接受的,也就是说ThreadStart和MethodInvoker都是可以接受的类型。这样编译器反而不知道应该用哪个代理去匹配匿名函数了,导致了编译错误的发生。
知道了原因,问题就很容易解决了。我们只需要加上MethodInvoker这个wrapper就能使用匿名函数了。
Invoke(new MethodInvoker(delegate { Text = "test"; }));
或者更简单地,用Lambda表达式来解决问题:
Invoke(new MethodInvoker(() => Text = "test"));
相关文章推荐
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
- 无法将 lambda 表达式 转换为类型“System.Delegate”,因为它不是委托类型
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
- 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型:解决方法
- 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型:解决方法
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
- 从异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }说开去
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
- 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
- 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
- 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
- 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型
- 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型
- 无法将lambda表达式转换为类型“System.Delegate”
- 无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换 解决办法
- 工作总结 无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable<T> (可空类型)