我正在尝试从事件创建一个Observable序列。该活动具有以下签名:
event SensorValueChangedEventHandler SensorValueChanged;
我正在尝试以下列方式创建Observable:
var eventAsObservable = Observable.FromEvent(
(EventHandler<SensorValueChangedEventArgs> ev) => new SensorValueChangedEventHandler(ev),
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
但是,编译器失败并出现以下错误:
Error CS0029: Cannot implicitly convert type `System.Action' to `DeviceMotion.Plugin.Abstractions.SensorValueChangedEventHandler'
我想知道是否有人可以评论如何从此事件中正确创建一个observable。
答案 0 :(得分:2)
你很可能需要这样做:
var eventAsObservable = Observable.FromEvent<SensorValueChangedEventHandler, SensorValueChangedEventArgs>(
handler => (sender, args) => handler(args),
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
在第一个参数中,您将告诉如何在Action<SensorValueChangedEventArgs>
(基本上为OnNext
)和您的代理之间进行映射。在第二个和第三个参数中,您传递了subscribe和unsubscribe函数。
答案 1 :(得分:1)
您似乎使用过时的方法来观察标准的.NET事件 - 它不再是FromEvent
- 您应该使用FromEventPattern
。
代码应如下所示:
var eventAsObservable =
Observable
.FromEventPattern<SensorValueChangedEventHandler, SensorValueChangedEventArgs>(
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
.FromEvent
方法用于处理非标准(不符合(object sender, XxxEventArgs e)
签名)类型的事件。