Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1562 | Anzahl registrierter User: 1893 | Besucher online: 65
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Event to Observable (Rx)


Autor: Rainer Hilmer
Sprache: C#
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 2505
  
Kick it on dotnet-kicks.de  

Beschreibung:

Die FromEvent-Methoden der Reactive Extensions können nur Events verarbeiten, die vom Typ EventHandler bzw. EventHandler sind.
Dieses Snippet ermöglicht zwar nicht die Verarbeitung von Events aller Typen, aber immerhin wird Action 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("ActionWithParameterEvent")
.Subscribe(o => result = o);
sample.FireStringActionEvent(_expected);
Assert.AreEqual(_expected, result);
}


Abgelegt unter: Rx, Event, Observable.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
         });
      }
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Rainer Hilmer schrieb am:  07.05.2011 17:11:16

Die FromEvent-Methode der neuen Version 1.0.10425 von Rx kann jetzt auch Nonstandard-Events umwandeln. Damit ist dieses Snippet obsolet.


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.