我将一个项目导入到Visual Studio中,我想查看源代码并进行实验编译,但是我得到了相同CS文件中大约20个不同位置提到的错误。
这是抛出错误的代码的一个示例部分:(错误是传递给this.Invoke的整个重载)。
if (this.InvokeRequired)
{
this.Invoke((Delegate) (() => this.CheckVersionInfo()));
}
答案 0 :(得分:4)
您只能将lambda表达式转换为特定的委托类型。在这种特殊情况下,它非常简单 - 你只需使用Action
(或MethodInvoker
,或任何没有参数和void
返回类型的委托类型):
if (this.InvokeRequired)
{
this.Invoke((Action) (() => this.CheckVersionInfo()));
}
或者只是使用方法组转换来简化事情:
if (this.InvokeRequired)
{
this.Invoke((Action)CheckVersionInfo);
}
或者,将扩展方法添加到Control
或ISynchronizeInvoke
,以添加Invoke(Action)
方法或“检查并调用”方法。 (在不同的情况下,两者都很有用。)
老实说,如果它基本上像这样破坏了,我会非常紧张你要导入的其余代码。如果代码甚至没有编译开始,那么一旦你修复了最明显的错误,你有多少信心工作?
请注意,这不仅仅是C#的不同版本或类似内容的问题 - 您发布的代码永远不会在任何版本的C#中都有效。
答案 1 :(得分:0)
试试这个:
this.Invoke(new MethodInvoker(() => this.CheckVersionInfo()));