4

我将一个项目导入到 Visual Studio 中,我想从中检查源代码并尝试编译它,但我在同一个 CS 文件中的大约 20 个不同位置得到了提到的错误。

这是引发错误的代码示例部分:(错误是传递给 this.Invoke 的整个重载)。

  if (this.InvokeRequired)
  {
    this.Invoke((Delegate) (() => this.CheckVersionInfo()));
  }
4

2 回答 2

4

您只能从 lambda 表达式转换为特定的委托类型。在这种特殊情况下,它真的很容易 - 您可以使用Action代替(或MethodInvoker,或任何没有参数和void返回类型的委托类型):

if (this.InvokeRequired)
{
  this.Invoke((Action) (() => this.CheckVersionInfo()));
}

或者只是使用方法组转换来简化事情:

if (this.InvokeRequired)
{
  this.Invoke((Action)CheckVersionInfo);
}

或者,添加扩展方法Control添加方法或“检查和调用”方法。(在不同的情况下,两者都可能有用。)ISynchronizeInvokeInvoke(Action)

不过老实说,如果您导入的其余代码基本上像这样被破坏,我会非常紧张。如果代码甚至一开始都没有编译,那么一旦你修复了最明显的错误,你有多大信心它会工作?

请注意,这不仅仅是不同版本的 C# 或类似的问题 - 您发布的代码在任何版本的 C# 中都不会起作用。

于 2013-08-15T06:09:48.057 回答
0

尝试这个:

this.Invoke(new MethodInvoker(() => this.CheckVersionInfo()));
于 2013-08-15T06:09:43.103 回答