84

に電話しようとしていますSystem.Windows.Threading.Dispatcher.BeginInvoke。メソッドのシグネチャは次のとおりです。

BeginInvoke(Delegate method, params object[] args)

デリゲートを作成する代わりに、Lambda を渡そうとしています。

_dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } );

それは私に言っているコンパイラエラーを私に与えています

ラムダを System.Delegate に変換できません。

デリゲートのシグネチャはオブジェクトをパラメーターとして受け取り、void を返します。私のラムダはこれと一致しますが、機能していません。私は何が欠けていますか?

4

5 に答える 5

76

短い:

_dispatcher.BeginInvoke((Action)(() => DoSomething()));
于 2011-10-06T01:50:50.637 に答える
72

このメソッドはSystem.Delegateを受け取るため、そのように宣言された特定のタイプのデリゲートを指定する必要があります。これは、次のように new DelegateType を介して指定されたデリゲートのキャストまたは作成を介して行うことができます。

_dispatcher.BeginInvoke(
     new Action<MyClass>((sender) => { DoSomething(); }),
     new object[] { this } 
  );

また、SLaksが指摘しているように、Dispatcher.BeginInvokeは params 配列を取るため、次のように書くだけです。

_dispatcher.BeginInvoke(
     new Action<MyClass>((sender) => { DoSomething(); }),
     this
  );

または、DoSomething がこのオブジェクト自体のメソッドである場合:

_dispatcher.BeginInvoke(new Action(this.DoSomething));
于 2011-02-08T17:50:13.750 に答える
10

インライン ラムダの使用...

Dispatcher.BeginInvoke((Action)(()=>{
  //Write Code Here
}));
于 2016-01-07T16:10:45.273 に答える
7

プロジェクトから System.Windows.Presentation.dll を参照して追加するとusing System.Windows.Threading、ラムダ構文を使用できる拡張メソッドにアクセスできます。

using System.Windows.Threading;

...

Dispatcher.BeginInvoke(() =>
{
});
于 2014-11-24T11:16:16.370 に答える