Rx ForkJoin不使用自定义事件

时间:2011-06-26 23:42:01

标签: silverlight system.reactive

我有一些自定义事件参数:

AutoOccurPerformedEventArgs : EventArgs

并且在2个单独的位置引发了与这些事件args相同的事件我试图使用Reactive Extensions来forkjoin这些然后订阅

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无效的任何想法?

1 个答案:

答案 0 :(得分:2)

查看ForkJoin方法的intellisense帮助。尽管有拼写错误,但它说:

  

并行运行两个可观察序列并组合它们的最后一个元素。

由于您正在对事件进行ForkJoin,因此您将永远无法获得结果,因为这些类型的可观察事件永远不会完成。

您可能希望使用MergeCombineLatest来达到您想要的效果,但由于您没有描述您的意图,我无法提供更好的建议。