4

ソース コードをチェックアウトしてコンパイルを試したいプロジェクトを Visual Studio にインポートしましたが、同じ CS ファイルの約 20 か所でエラーが発生します。

エラーをスローするコード セクションの例を次に示します (エラーは、this.Invoke に渡されたオーバーロード全体です)。

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

2 に答える 2

4

ラムダ式から特定のデリゲート型にのみ変換できます。この特定のケースでは、非常に簡単ですが、Action代わりに使用できます (またはMethodInvoker、またはパラメーターと戻り値のない任意のデリゲートvoid型)。

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

または、単純化するためにメソッド グループ変換を使用します。

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

または、拡張メソッドを追加するControlISynchronizeInvoke単にメソッドを追加するInvoke(Action)か、「チェックして呼び出す」メソッドを追加します。(どちらも異なるコンテキストで役立ちます。)

正直なところ、このように基本的に壊れている場合、インポートしている残りのコードに非常に神経質になります。最初からコードがコンパイルされていない場合、最も明白なエラーを修正した後、コードが機能するという自信はどれくらいありますか?

これは、C# のバージョンが異なるだけの問題ではないことに注意してください。投稿したコードは、C# のどのバージョンでも機能しませんでした。

于 2013-08-15T06:09:48.057 に答える
0

これを試して:

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