Feedback

C# - Event to Observable (Rx)

Veröffentlicht von am 20.02.2011
(1 Bewertungen)
Die FromEvent-Methoden der Reactive Extensions können nur Events verarbeiten, die vom Typ EventHandler bzw. EventHandler<T> sind.
Dieses Snippet ermöglicht zwar nicht die Verarbeitung von Events aller Typen, aber immerhin wird Action<T> schon einmal unterstützt.
Weitere Informationen in diesem Thread:
http://dotnet-forum.de/forums/t/3304.aspx

Ein Test, der die Anwendung demonstriert:

[TestMethod]
public void Testing_event_2_observable_with_reflection()
{
string result = string.Empty;
var sample = new EventSamples();
sample.Event2Observable<EventSamples, string>("ActionWithParameterEvent")
.Subscribe(o => result = o);
sample.FireStringActionEvent(_expected);
Assert.AreEqual(_expected, result);
}
public static IObservable<T> Event2Observable<TSource, T>(
         this TSource source, string eventName)
         where TSource : class
      {
         EventInfo info = source.GetType()
            .GetEvent(eventName, BindingFlags.Public | BindingFlags.Instance);
         if(info == null)
         {
            throw new InvalidOperationException(
               string.Format(CultureInfo.CurrentCulture,
               "Could not find event '{0}' on object of type '{1}'.",
               new object[] { eventName, source.GetType().FullName }));
         }
         return Observable.Create<T>(o =>
         {
            Action<T> handler = o.OnNext;
            info.AddEventHandler(source, handler);
            return () => info.RemoveEventHandler(source, handler);
         });
      }
Abgelegt unter Rx, Event, Observable.

1 Kommentare zum Snippet

Rainer Hilmer schrieb am 07.05.2011:
Die FromEvent-Methode der neuen Version 1.0.10425 von Rx kann jetzt auch Nonstandard-Events umwandeln. Damit ist dieses Snippet obsolet.
 

Logge dich ein, um hier zu kommentieren!