0

RX 是否有等效的 CancelEventArg?我在我的存储库中更新了在保存之前触发的事件。我检索 InvocationList 并遍历每个 EventHandler 以检查取消标志是否设置为中止保存。我是 RX 新手,通过观看有关 Observable 与事件的 RX 研讨会http://channel9.msdn.com/Series/Rx-Workshop/Rx-Workshop-Observables-versus-Events 我想知道如何替换 EventHandler使用主题并知道其中一个订阅者是否取消了事件。

如果我无法将事件转换为主题,有没有办法为 EventHandler 获取 Observable 并在 OnNext 中从 EventHandler 调用中访问发送者和 CancelEventArgs?

4

1 回答 1

0

使用 Observable.FromEvent 您可以访问事件参数,例如这里:

IObservable<Key> keyPress = 
    Observable.FromEvent<KeyEventArgs>(Application.Current.RootVisual, "KeyUp")
        .Select(ev => ev.EventArgs.Key);

因此,您应该能够在事件 args 中设置任何属性的值。

请注意,这里有一个设计问题:取消是您在正常情况下应该已经小心处理的事情,但是混合可取消事件和异步执行路径可能会在以后变成维护噩梦。在这里使用生产者-消费者模式,并将其视为一种单向通信:您对事件做出反应,您不应该更改它。如果您需要更改它,请使用过滤器(通过 Rx 实用程序方法)。

于 2013-04-30T08:34:31.937 回答