从 Event 创建 Observable 时出错
Error creating Observable from Event
我正在尝试从一个事件创建一个 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'
我想知道是否有人可以评论如何从这个事件中正确创建一个可观察对象。
您很可能需要这样做:
var eventAsObservable = Observable.FromEvent<SensorValueChangedEventHandler, SensorValueChangedEventArgs>(
handler => (sender, args) => handler(args),
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
在第一个参数中,您说明了如何在 Action<SensorValueChangedEventArgs>
(基本上是 OnNext
)和您的委托之间进行映射。在第二个和第三个参数中传递订阅和取消订阅函数。
您似乎在使用过时的方法来观察标准 .NET 事件 - 它不再是 FromEvent
- 您应该使用 FromEventPattern
.
代码应如下所示:
var eventAsObservable =
Observable
.FromEventPattern<SensorValueChangedEventHandler, SensorValueChangedEventArgs>(
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
.FromEvent
方法用于处理非标准(不符合(object sender, XxxEventArgs e)
签名)类型的事件。
我正在尝试从一个事件创建一个 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'
我想知道是否有人可以评论如何从这个事件中正确创建一个可观察对象。
您很可能需要这样做:
var eventAsObservable = Observable.FromEvent<SensorValueChangedEventHandler, SensorValueChangedEventArgs>(
handler => (sender, args) => handler(args),
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
在第一个参数中,您说明了如何在 Action<SensorValueChangedEventArgs>
(基本上是 OnNext
)和您的委托之间进行映射。在第二个和第三个参数中传递订阅和取消订阅函数。
您似乎在使用过时的方法来观察标准 .NET 事件 - 它不再是 FromEvent
- 您应该使用 FromEventPattern
.
代码应如下所示:
var eventAsObservable =
Observable
.FromEventPattern<SensorValueChangedEventHandler, SensorValueChangedEventArgs>(
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
.FromEvent
方法用于处理非标准(不符合(object sender, XxxEventArgs e)
签名)类型的事件。