web-dev-qa-db-ja.com

パラメーターを指定したDispatch.Invoke(new Action ...)

以前は

Dispatcher.Invoke(new Action(() => colorManager.Update()));

別のスレッドからWPFへの表示を更新します。設計上、プログラムを変更する必要があり、ColorImageFrameパラメーターをColorStreamManager.Update()メソッドに渡す必要があります。

this リンクに続いて、ディスパッチャーを次のように変更しました。

Dispatcher.Invoke(new Action<ColorStreamManager, ColorImageFrame>((p,v) => p.Update(v)));

正常にコンパイルされますが、まったく実行されません。 VS2010は「パラメーター数が一致しません。」私のColorStreamManager.Update()メソッドにはRaisePropertyChanged(() => Bitmap)があります。

誰かがどこで間違ったのか指摘できますか?

ColorStreamManager.Update()メソッドのシグネチャは次のとおりです。

 public void Update(ColorImageFrame frame);
15
ikel

Dispatcherはメソッドに何を渡すかがわからないため、アクションにパラメータを設定したくない場合。代わりに、変数を閉じることができます。

ColorImageFrame someFrame = ...;
Dispatcher.Invoke(new Action(() => colorManager.Update(someFrame)));
20
Servy

_Action<T1, T2>_デリゲートを使用してInvokeを呼び出す場合は、2つのActionパラメーターをInvoke呼び出しに渡す必要があります。

_ColorStreamManager colorManager = ...
ColorImageFrame frame = ...

Dispatcher.Invoke(
    new Action<ColorStreamManager, ColorImageFrame>((p,v) => p.Update(v)),
    colorManager,
    frame);
_

ここで使用しているInvokeオーバーロードは Dispatcher.Invoke(Delegate, Object[]) です。

2
Clemens