【发布时间】:2016-03-08 06:24:16
【问题描述】:
我正在努力将以下事件转换为IObservable:
public delegate void _dispSolutionEvents_OpenedEventHandler();
event _dispSolutionEvents_OpenedEventHandler Opened;
该事件来自一个库,所以我无法更改它。
应该这样做的IObservable.FromEvent 的重载具有以下签名:
public static IObservable<Unit> FromEvent
( Action<Action> addHandler
, Action<Action> removeHandler
)
所以我尝试像这样转换事件:
var opened = Observable.FromEvent
( h => _SolutionEvents.Opened += h
, h => _SolutionEvents.Opened -= h
);
但是编译器不喜欢_SolutionEvents.Opened += h 和_SolutionEvents.Opened += h 因为
无法将类型“System.Action”隐式转换为“EnvDTE._dispSolutionEvents_OpenedEventHandler”。
我认为我不能只说_SolutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler(h),因为这样删除将不起作用,因为我有一个不同的实例,对吧?
Observable.FromEvent 的另一个重载具有以下签名:
public static IObservable<TEventArgs> FromEvent<TDelegate, TEventArgs>
( Func<Action<TEventArgs>, TDelegate> conversion
, Action<TDelegate> addHandler
, Action<TDelegate> removeHandler
)
这个允许将动作转换为事件处理程序,但它似乎只适用于TEventArgs。
Rx 是否缺少适当的重载或我是否缺少某些内容?
【问题讨论】:
标签: c# events system.reactive