c# - 如何将 Rx Observable 与通用 EventHandler<T> 一起使用?

标签 c# system.reactive

以下代码有效

var mouseTracker = Observable.FromEventPattern<MouseEventArgs>(form1, "MouseMove");
//for Form1_MouseMove(object sender, MouseEventArgs e)

但是如何使 Observable.FromEventPattern 接受 EventHandler ?类似的东西

var mouseTracker = Observable.FromEventPattern<EventHandler<StockQuote>>(_board, "QuoteUpdated");
//for board_QuoteUpdated(object sender, StockQuote stockQuote)

编辑

格鲁克的回答有效。我需要将 FromEventPattern 更改为 FromEvent。

var quoteObserver = Observable.FromEvent<EventHandler<StockQuote>, StockQuote>(
h => (_, sq) => h(sq),
eh => _board.QuoteUpdated += eh,
eh => _board.QuoteUpdated -= eh);

最佳答案

不存在泛型类型 EventArgs<T> 这样的东西.

假设您需要为不遵循标准事件模式的事件创建一个可观察对象(在您的情况下,这意味着 StockQuote 类型不扩展 EventArgs ),那么 FromEventPattern无法使用。

但您仍然可以使用FromEvent :

IObservable<StockQuote> obs = Observable.FromEvent<QuoteUpdatedDelegate, StockQuote>(
    h => (_, sq) => h(sq),
    eh => _board.QuoteUpdated += eh,
    eh => _board.QuoteUpdated -= eh);

关于c# - 如何将 Rx Observable 与通用 EventHandler<T> 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33040677/

相关文章:

c# - 为每个提供商实现电子邮件验证的正确设计模式是什么?

C# 获取线程类与主类通信

c# - 我如何查看我的响应式扩展查询在做什么?

c# - RX 和异常处理

c# - 安装 Reactive Extensions 后动态使用 Newtonsoft Json 时出现 RuntimeBinderException

c# - 从 ASP.NET 5 Controller VS 2015 获取 wwwroot 文件夹路径

c# - 等效于 Python 的 C# "struct.pack/unpack"?

c# - 在列表上使用 TableQuery.CombineFilters 进行 AND 运算

c# - 如果当前失败,如何继续队列中的其他任务?

c# - 响应式(Reactive)可观察订阅 : Stop Subscription and Renew Subscription