これらのどちらも機能しません:
_uiDispatcher.Invoke(() => { });
_uiDispatcher.Invoke(delegate() { });
私がしたいのは、メインUIスレッドでインラインメソッドを呼び出すことだけです。そこで、メインスレッドでこれを呼び出しました。
_uiDispatcher = Dispatcher.CurrentDispatcher;
そして今、私は別のスレッドからそのスレッドでいくつかのコードを実行したい。どうすればいいのですか?間違った構文を使用していますか?
これはnot WPFアプリケーションであることに注意してください。 WindowsBase
を参照したので、Dispatcher
クラスにアクセスできます。
問題は、呼び出すデリゲートの正確なtypeを提供していないことです。 Dispatcher.Invoke
はDelegate
を取ります。 Action<T>
?もしそうなら、T
とは何ですか? MethodInvoker
ですか? Action
?何?
デリゲートが引数を取らず、何も返さない場合は、Action
またはMethodInvoker
を使用できます。これを試して:
_uiDispatcher.Invoke(new Action(() => { }));
this.Dispatcher.Invoke((Action)(() => { textBox1.Text = "Test 123"; }));
何かを見逃していない限り、これはWPFアプリケーションではないだけであるということです。 Dispatcherは使用するのに適切なクラスではないと思います。
これがWinFormアプリの場合、UIスレッドは WindowsFormsSynchronizationContext からアクセスできます。