web-dev-qa-db-ja.com

ラムダ式を「System.Delegate」型に変換できません

これらのどちらも機能しません:

_uiDispatcher.Invoke(() => { });
_uiDispatcher.Invoke(delegate() { });

私がしたいのは、メインUIスレッドでインラインメソッドを呼び出すことだけです。そこで、メインスレッドでこれを呼び出しました。

_uiDispatcher = Dispatcher.CurrentDispatcher;

そして今、私は別のスレッドからそのスレッドでいくつかのコードを実行したい。どうすればいいのですか?間違った構文を使用していますか?

これはnot WPFアプリケーションであることに注意してください。 WindowsBaseを参照したので、Dispatcherクラスにアクセスできます。

46
mpen

問題は、呼び出すデリゲートの正確なtypeを提供していないことです。 Dispatcher.InvokeDelegateを取ります。 Action<T>?もしそうなら、Tとは何ですか? MethodInvokerですか? Action?何?

デリゲートが引数を取らず、何も返さない場合は、ActionまたはMethodInvokerを使用できます。これを試して:

_uiDispatcher.Invoke(new Action(() => { }));
63
thecoop
 this.Dispatcher.Invoke((Action)(() => { textBox1.Text = "Test 123"; }));
4
Narottam Goyal

何かを見逃していない限り、これはWPFアプリケーションではないだけであるということです。 Dispatcherは使用するのに適切なクラスではないと思います。

これがWinFormアプリの場合、UIスレッドは WindowsFormsSynchronizationContext からアクセスできます。

1
IAbstract