有人可以建议为什么这行代码不能编译?它会生成CS1660:
s.run_button.Invoke((b) => { b.Enabled = false; },
new object[] { s.run_button });
Visual Studio说:无法将lambda表达式转换为'System.Delegate'类型,因为它不是委托类型
答案 0 :(得分:4)
Lambda表达式本身没有类型,不能转换为System.Delegate
。 Invoke
方法的类型为System.Delegate
,因此它不会编译,因为lambda表达式没有类型。您需要在此处提供显式类型转换
s.run_button.Invoke(
(Action<Button>)((b) => { b.Enabled = false; }),
new object[] { s.run_button });
答案 1 :(得分:2)
Invoke方法采用Delegate类型的参数。它是在lambdas进入我们的世界之前写的。最简单的解决方案是使用Action包装lambda。我不确定究竟是什么类型的“b”(C#编译器也没有,因此错误),所以你必须明确地传递它。类似的东西:
s.run_button.Invoke(new Action<Button>(b => b.Enabled = false), new object[] { s.run_button });