Playing around with System.Reactive in Silverlight

August 4, 2009

I’ve just been checking out some of the asynchronous programming stuff that will be shipped with .Net 4.0.  I managed to obtain a preview copy of the System.Reactive.dll by downloading the lates Silverlight Toolkit source.  This seems like very exciting stuff indeed.  Basically turning the whole .Net event infrastructure on its head.  This is based on the observation that we can think of the observer pattern as being the dual of the enumerable pattern.  The power of this is that we can use Linq to enumerate over events just as we do over objects in an enumerable.  Or, in other words, Linq of pushed rather than pulled data.

Check this out for more information:

My one criticism of this so far is:

Say you want to create an observer on the MouseMove event on a control.  You’d do something like this:

var mouseEventSource = Observable.FromEvent<MouseEventArgs>(this, “MouseMove”);
var mouseMoveSubscription = mouseEventSource.Subscribe(mea => Debug.WriteLine(“Mouse Moved”));

And this works perfectly.  The only problem… that pesky “MouseMove” parameter when converting the event into and IObservable.  I noticed that there’s an overload of the same method that takes Actions to add and remove the EventHandler.  This would look something like this:

var mouseEventSource = Observable.FromEvent<MouseEventArgs>(eh=>this.MouseMove += eh, eh=>this.MouseMove -= eh);

This looks much nicer as I’m not passing in that ‘orrible string and therefore have compile-time checking of the event.  Only problem with this is that it requires the MouseMove event handler to be a generic EventHandler<MouseEventArgs>.  Sadly, the MouseEventHandler is a delegate in its own right rather than deriving from the generic EventHandler.

This leads me to the following conclusion.  This looks like really interesting technology, but it’ll require a massive overhauling of the .Net base class libraries to be truely useful.


2 Responses to “Playing around with System.Reactive in Silverlight”

  1. head in the box said

    There is an overload for that …

  2. […] 17, 2009 Further to my previous post, Erik Meijer commented that an overload to the FromEvent method is available to convert from […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: