<PackageReference Include="System.Reactive" Version="6.1.0-preview.9" />

WindowsObservable

public static class 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 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(delegate(IObserver<EventPattern<TSender, TResult>> observer) { TypedEventHandler<TSender, TResult> h = (TypedEventHandler<TSender, TResult>)(TypedEventHandler<TSender, TResult>)delegate(TSender sender, TResult args) { observer.OnNext(new EventPattern<TSender, TResult>(sender, args)); }; addHandler((TypedEventHandler<TSender, TResult>)h); return delegate { removeHandler((TypedEventHandler<TSender, TResult>)h); }; }); } public 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(delegate(IObserver<EventPattern<TSender, TResult>> observer) { TDelegate h = (TDelegate)conversion(delegate(TSender sender, TResult args) { observer.OnNext(new EventPattern<TSender, TResult>(sender, args)); }); 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); } } }