WindowsObservable
Provides a set of static methods for importing typed events from Windows Runtime APIs.
            
                using System.Reactive.Windows.Foundation;
using System.Runtime.CompilerServices;
using Windows.Foundation;
namespace System.Reactive.Linq
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    [CLSCompliant(false)]
    public static class WindowsObservable
    {
        public unsafe static IObservable<EventPattern<TSender, TResult>> FromEventPattern<[System.Runtime.CompilerServices.Nullable(2)] TSender, [System.Runtime.CompilerServices.Nullable(2)] TResult>(Action<TypedEventHandler<TSender, TResult>> addHandler, Action<TypedEventHandler<TSender, TResult>> removeHandler)
        {
            if (addHandler == null)
                throw new ArgumentNullException("addHandler");
            if (removeHandler == null)
                throw new ArgumentNullException("removeHandler");
            return Observable.Create<EventPattern<TSender, TResult>>(delegate {
                <>c__DisplayClass0_1<TSender, TResult> <>c__DisplayClass0_;
                TypedEventHandler<TSender, TResult> h = new TypedEventHandler<TSender, TResult>((object)<>c__DisplayClass0_, (IntPtr)(void*));
                addHandler(h);
                return delegate {
                    removeHandler(h);
                };
            });
        }
        public unsafe static IObservable<EventPattern<TSender, TResult>> FromEventPattern<[System.Runtime.CompilerServices.Nullable(2)] TDelegate, [System.Runtime.CompilerServices.Nullable(2)] TSender, [System.Runtime.CompilerServices.Nullable(2)] TResult>(Func<TypedEventHandler<TSender, TResult>, TDelegate> conversion, Action<TDelegate> addHandler, Action<TDelegate> removeHandler)
        {
            if (conversion == null)
                throw new ArgumentNullException("conversion");
            if (addHandler == null)
                throw new ArgumentNullException("addHandler");
            if (removeHandler == null)
                throw new ArgumentNullException("removeHandler");
            return Observable.Create<EventPattern<TSender, TResult>>(delegate {
                <>c__DisplayClass1_1<TDelegate, TSender, TResult> <>c__DisplayClass1_;
                TDelegate h = (TDelegate)conversion(new TypedEventHandler<TResult, ?>((object)<>c__DisplayClass1_, (IntPtr)(void*)));
                addHandler((TDelegate)h);
                return delegate {
                    removeHandler((TDelegate)h);
                };
            });
        }
        public static IEventPatternSource<TSender, TEventArgs> ToEventPattern<[System.Runtime.CompilerServices.Nullable(2)] TSender, [System.Runtime.CompilerServices.Nullable(2)] TEventArgs>(this IObservable<EventPattern<TSender, TEventArgs>> source)
        {
            if (source == null)
                throw new ArgumentNullException("source");
            return new EventPatternSource<TSender, TEventArgs>(source, (Action<Action<TSender, TEventArgs>, EventPattern<TSender, TEventArgs>>)delegate(Action<TSender, TEventArgs> h, EventPattern<TSender, TEventArgs> evt) {
                h(evt.Sender, evt.EventArgs);
            });
        }
        public static IObservable<TResult> SelectMany<[System.Runtime.CompilerServices.Nullable(2)] TSource, [System.Runtime.CompilerServices.Nullable(2)] TResult>(this IObservable<TSource> source, Func<TSource, IAsyncOperation<TResult>> selector)
        {
            if (source == null)
                throw new ArgumentNullException("source");
            if (selector == null)
                throw new ArgumentNullException("selector");
            return source.SelectMany((TSource x) => AsyncInfoObservableExtensions.ToObservable<TResult>(selector(x)));
        }
        public static IObservable<TResult> SelectMany<[System.Runtime.CompilerServices.Nullable(2)] TSource, [System.Runtime.CompilerServices.Nullable(2)] TResult, [System.Runtime.CompilerServices.Nullable(2)] TProgress>(this IObservable<TSource> source, Func<TSource, IAsyncOperationWithProgress<TResult, TProgress>> selector)
        {
            if (source == null)
                throw new ArgumentNullException("source");
            if (selector == null)
                throw new ArgumentNullException("selector");
            return source.SelectMany((TSource x) => AsyncInfoObservableExtensions.ToObservable<TResult, TProgress>(selector(x)));
        }
        public static IObservable<TResult> SelectMany<[System.Runtime.CompilerServices.Nullable(2)] TSource, [System.Runtime.CompilerServices.Nullable(2)] TAsyncOperationResult, [System.Runtime.CompilerServices.Nullable(2)] TResult>(this IObservable<TSource> source, Func<TSource, IAsyncOperation<TAsyncOperationResult>> asyncOperationSelector, Func<TSource, TAsyncOperationResult, TResult> resultSelector)
        {
            if (source == null)
                throw new ArgumentNullException("source");
            if (asyncOperationSelector == null)
                throw new ArgumentNullException("asyncOperationSelector");
            if (resultSelector == null)
                throw new ArgumentNullException("resultSelector");
            return source.SelectMany((TSource x) => AsyncInfoObservableExtensions.ToObservable<TAsyncOperationResult>(asyncOperationSelector(x)), resultSelector);
        }
        public static IObservable<TResult> SelectMany<[System.Runtime.CompilerServices.Nullable(2)] TSource, [System.Runtime.CompilerServices.Nullable(2)] TAsyncOperationResult, [System.Runtime.CompilerServices.Nullable(2)] TAsyncOperationProgress, [System.Runtime.CompilerServices.Nullable(2)] TResult>(this IObservable<TSource> source, Func<TSource, IAsyncOperationWithProgress<TAsyncOperationResult, TAsyncOperationProgress>> asyncOperationSelector, Func<TSource, TAsyncOperationResult, TResult> resultSelector)
        {
            if (source == null)
                throw new ArgumentNullException("source");
            if (asyncOperationSelector == null)
                throw new ArgumentNullException("asyncOperationSelector");
            if (resultSelector == null)
                throw new ArgumentNullException("resultSelector");
            return source.SelectMany((TSource x) => AsyncInfoObservableExtensions.ToObservable<TAsyncOperationResult, TAsyncOperationProgress>(asyncOperationSelector(x)), resultSelector);
        }
    }
}