4

私は VS2008 で WPF アプリケーションに取り組んでおり、別の WPF アプリケーションのコードを再利用することにしました。ただし、次の行に奇妙な問題があります。

Message.Dispatcher.Invoke(() => { Message.Text = "Looking for orders..."; });

このコードは元のアプリケーションでは問題なく動作しますが、新しいアプリケーションでは通常の「ラムダ式を 'System.Delegate' 型に変換できません。デリゲート型ではないためです」というエラーがスローされます。

式を Action としてキャストして動作させることができることはわかっています。しかし、あるプロジェクトでは同じコードがコンパイルされて動作するのに、別のプロジェクトでは動作しない理由が気になります。

4

1 に答える 1

6

古いプロジェクトのどこかに、キャストを処理する拡張メソッドが定義されている可能性があります。

何かのようなもの:

public static void Invoke(this Dispatcher dispatcher, Action action)
{
    dispatcher.Invoke((Delegate)action);
}

次に、問題なく次のことを実行できます。

Message.Dispatcher.Invoke(() => { Message.Text = "Looking for orders..."; });

更新:
.NET Framework には、既に組み込まれているこれらの種類のものを処理できる Dispatcher 用の拡張メソッドのセットがあることがわかりました。

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcherextensions.aspx

于 2012-07-14T10:26:28.803 に答える