带参数的Dispatch.Invoke(new Action …)

以前我有过

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

从另一个线程更新显示到WPF。 由于设计,我不得不改变程序,我必须将ColorImageFrame参数传递给我的ColorStreamManager.Update()方法。

点击此链接后,我将调度程序修改为:

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

它编译得很好但根本不会运行。 VS2010说“参数计数不匹配”。 在我的ColorStreamManager.Update()方法中,我有RaisePropertyChanged(() => Bitmap) ;

有人可以指出我哪里出错了吗?

ColorStreamManager.Update()方法的签名如下:

  public void Update(ColorImageFrame frame); 

您不希望操作具有参数,因为Dispatcher不会知道要传递给方法的内容。 相反,你可以做的是关闭变量:

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

如果使用Action委托调用Invoke ,则需要将两个Action参数传递给Invoke调用:

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

您在此处使用的Invoke重载是Dispatcher.Invoke(Delegate, Object[])