Reputation: 3744
I am trying to create an Observable sequence from an event. The event has the following signature:
event SensorValueChangedEventHandler SensorValueChanged;
I am trying to create the Observable in the following way:
var eventAsObservable = Observable.FromEvent(
(EventHandler<SensorValueChangedEventArgs> ev) => new SensorValueChangedEventHandler(ev),
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
However, the compiler is failing with the following error:
Error CS0029: Cannot implicitly convert type `System.Action' to `DeviceMotion.Plugin.Abstractions.SensorValueChangedEventHandler'
I am wondering if someone can comment on how to correctly create an observable from this event.
Upvotes: 1
Views: 270
Reputation: 101613
Most likely you need to do it like this:
var eventAsObservable = Observable.FromEvent<SensorValueChangedEventHandler, SensorValueChangedEventArgs>(
handler => (sender, args) => handler(args),
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
In the first argument you tell how to map between Action<SensorValueChangedEventArgs>
(basically OnNext
) and your delegate. In second and third arguments you pass subscribe and unsubscribe functions.
Upvotes: 2
Reputation: 117175
You appear to be using an obsolete method for observing standard .NET events - it's no longer FromEvent
- you should be using FromEventPattern
.
The code should look like this:
var eventAsObservable =
Observable
.FromEventPattern<SensorValueChangedEventHandler, SensorValueChangedEventArgs>(
ev => CrossDeviceMotion.Current.SensorValueChanged += ev,
ev => CrossDeviceMotion.Current.SensorValueChanged -= ev);
The .FromEvent
method is used for handling non-standard (doesn't comply with (object sender, XxxEventArgs e)
signature) type events.
Upvotes: 1