我有一些自定义事件参数:
AutoOccurPerformedEventArgs : EventArgs
带有这些事件参数的同一事件在两个不同的位置引发,我正试图使用反应扩展来分叉连接这些,然后订阅
var events = new[]
{
Observable.FromEvent<AutoOccurPerformedEventArgs>(viewModel1, "AutoOccurActionPerformed"),
Observable.FromEvent<AutoOccurPerformedEventArgs>(viewModel2, "AutoOccurActionPerformed"),
};
events.ForkJoin().Subscribe(op => IsUpdatedByAutoOccur = op.Any(observedItem => observedItem.EventArgs.IsUpdatedByAutoOccur));
我在订阅中的匿名代理从未被调用。不会引发任何异常,只是永远不会调用委托。
然而,如果我单独订阅每个事件,而没有ForkJoin,则事件将得到正确处理(尽管是单独的)
Observable.FromEvent<AutoOccurPerformedEventArgs>(viewModel1, "AutoOccurActionPerformed")
.Subscribe(o => IsUpdatedByAutoOccur = o.EventArgs.IsUpdatedByAutoOccur ? true : IsUpdatedByAutoOccur);
Observable.FromEvent<AutoOccurPerformedEventArgs>(viewModel2, "AutoOccurActionPerformed")
.Subscribe(o => IsUpdatedByAutoOccur = o.EventArgs.IsUpdatedByAutoOccur ? true : IsUpdatedByAutoOccur);
关于为什么ForkJoin不起作用,有什么想法吗?
查看有关ForkJoin
方法的intellisense帮助。尽管有拼写错误,但上面写着:
并行运行两个可观测序列,并组合它们的最后一个元素。
由于您对事件执行ForkJoin
,因此永远不会得到结果,因为这些类型的可观察性永远不会完成。
你可能想使用Merge
或CombineLatest
来实现你想要的,但由于你没有描述你的意图,我无法给出更好的建议。