18

以前は持っていた

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

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

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

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

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

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

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

 public void Update(ColorImageFrame frame);
4

2 に答える 2

25

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

ColorImageFrame someFrame = ...;
Dispatcher.Invoke(new Action(() => colorManager.Update(someFrame)));
于 2013-02-06T21:08:31.363 に答える
3

Invokeデリゲートを使用して呼び出す場合はAction<T1, T2>、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[]).

于 2013-02-06T21:04:37.480 に答える