/// <summary> /// Converts the ColorFrameArrived event to an observable sequence. /// </summary> /// <param name="kinectSensor">The kinect sensor.</param> /// <returns>The observable sequence.</returns> public static IObservable <ColorFrameArrivedEventArgs> ColorFrameArrivedObservable(this KinectSensor kinectSensor) { if (kinectSensor == null) { throw new ArgumentNullException("kinectSensor"); } return(Observable.Create <ColorFrameArrivedEventArgs>(observer => { var reader = kinectSensor.ColorFrameSource.OpenReader(); var disposable = kinectSensor.ColorFrameArrivedObservable(reader) .Subscribe(x => observer.OnNext(x), e => observer.OnError(e), () => observer.OnCompleted()); return new CompositeDisposable { disposable, reader }; })); }