何时使用 Observable.FromEventPattern 而不是 Observable.FromEvent?
我们有一个客户端调用 TIBCO EMS 队列,并像这样连接事件:
var msgConsumer = _session.CreateConsumer(responseQueue);
var response = Observable
.FromEvent<EMSMessageHandler, EMSMessageEventArgs> (
h => msgConsumer.MessageHandler += h,
h => msgConsumer.MessageHandler -= h)
.Where(arg => arg.Message.CorrelationID == message.MessageID);
当我调用 response.Subscribe(...)
时,我收到 System.ArgumentException“绑定到目标时出错”方法。”
我可以让它与 Observable.FromEventPattern
另外,我有 IObservable
而不是 IObservable
我想了解的是:什么时候应该使用 FromEvent 超过
FromEventPattern
?看起来有点反复试验。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
“对结构上的事件使用 FromEvent 看起来不像 .NET 事件模式(即不基于发送者、事件参数),而对基于模式的事件使用 FromEventPattern。” - Bart De Smet(Rx 团队) )
"Use FromEvent for events structurally don't look like a .NET event pattern (i.e. not based on sender, event args), and use FromEventPattern for the pattern-based ones." - Bart De Smet (Rx team)
为了进一步详细说明这一点,您通常可以根据您要观察的类中使用的事件类型来确定何时选择
FromEvent
与FromEventPattern
之一。使用FromEventPattern
当您的事件属于EventHandler
类型或通用EventHandler
类型时。使用FromEvent
当您使用自定义的非通用事件处理程序类型时。以下示例直接取自 Rx wiki,其中有很多很好的示例 - 准确地说,其中有 101 个。
FromEventPattern(使用通用事件处理程序):
FromEvent:
To elaborate on this a bit further, you can typically determine when to choose one of the
FromEvent
vsFromEventPattern
by the type of event used in the class you're trying to observe. UseFromEventPattern
when your event is of typeEventHandler
or the genericEventHandler<T>
. UseFromEvent
when you're using a custom, non-generic event handler type.The following examples are lifted directly from the Rx wiki, which has lots of good examples- 101 of them to be exact.
FromEventPattern (with generic EventHandler):
FromEvent:
显然新语法发生了一些变化。当前语法如下:
Apparently the new syntax has changed a bit. The current syntax is the following: