我将一个项目导入到 Visual Studio 中,我想从中检查源代码并尝试编译它,但我在同一个 CS 文件中的大约 20 个不同位置得到了提到的错误。
这是引发错误的代码示例部分:(错误是传递给 this.Invoke 的整个重载)。
if (this.InvokeRequired)
{
this.Invoke((Delegate) (() => this.CheckVersionInfo()));
}
您只能从 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# 中都不会起作用。
尝试这个:
this.Invoke(new MethodInvoker(() => this.CheckVersionInfo()));