Question

There's been quite some hype around the new Reactive Framework in .NET 4.0. While I think I undestood its basic concept I am not completely sold that it is that useful. Can you come up with a good example (that is halfway easy to understand) that totally shows of the power and usefullness of Rx? Show something that makes life so much easier when done with Rx.

Was it helpful?

Solution

Here is a quick example. Program a drag operation in a fully declarative manner, using LINQ to events.

   //Create an observable with the initial position and dragged points using LINQ to Events
   var mouseDragPoints = from md in e.GetMouseDown()
                           let startpos=md.EventArgs.GetPosition(e)
                           from mm in e.GetMouseMove().Until(e.GetMouseUp())
                           select new
                           {
                             StartPos = startpos,
                             CurrentPos = mm.EventArgs.GetPosition(e),
                           };

And draw a line from startpos to current pos

//Subscribe and draw a line from start position to current position  
            mouseDragPoints.Subscribe  
                (item =>  
                { 
                  //Draw a line from item.Startpos to item.CurrentPos
                }
                ); 

As you can see, there are no event handlers all over the places, nor boolean variables for managing the state.

If you are curious about those GetEventName() methods, suggesting you to read this entire article and download the source code and play with it.

Read it here and play with the source >>

OTHER TIPS

I wrote a demo step-by-step on my blog recently : http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reactive-extensions-story-code-and-slides/

I'm basically building a small app in WPF with Rx and Bing Search:

enter image description here

The app will wait till you stop typing and then do an async search and present the results. If before the results came you issue another search it will automatically drop the existing search.

You can force a search (to skip the waiting time) by pressing ENTER or the "Go!" button and can stop an ongoing search by pressing the Clear button. There is a busy indicator and some error handling (in case the network goes down, for example).

Main topics covered :

  • Creating an observable from an event (TextChanged, Button.Click etc)
  • Async delegate (async search)
  • TakeUntil extension
  • DistinctUntilChanged extension (including custom Equals)
  • Merge extension
  • Throttle extension
  • ObserveOn extension (for UI thread sync-ing)

.. and more!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top