Подтвердить что ты не робот

Dispatch.Invoke(новое действие...) с параметром

Раньше у меня был

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);
4b9b3361

Ответ 1

Вы не хотите, чтобы действие имело параметры, потому что Dispatcher не будет знать, что передать методу. Вместо этого вы можете закрыть эту переменную:

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

Ответ 2

Если вы вызываете Invoke с делегатом Action<T1, T2>, вам необходимо передать два параметра Action для вызова Invoke:

ColorStreamManager colorManager = ...
ColorImageFrame frame = ...

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

Перегрузка вызова, используемая здесь, Dispatcher.Invoke(Delegate, Object[]).