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>委托调用,则需要将两个 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 回答