Reactive Framework for .NET示例证明了它的用处

时间:2009-11-18 13:36:39

标签: .net system.reactive reactive-programming

围绕.NET 4.0中的新Reactive Framework进行了一些炒作。虽然我认为我不知道它的基本概念,但我并没有完全销售,因此它非常有用。你能想出一个很好的例子(中途易于理解),它完全展示了Rx的力量和实用性吗?展示一些使用Rx完成生活变得容易的东西。

2 个答案:

答案 0 :(得分:9)

这是一个简单的例子。使用LINQ to事件以完全声明的方式编写拖动操作。

   //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),
                           };

从startpos到当前pos

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

正如您所看到的,整个地方都没有事件处理程序,也没有用于管理状态的布尔变量。

如果您对这些GetEventName()方法感到好奇,建议您阅读整篇文章并下载源代码并使用它。

Read it here and play with the source>>

答案 1 :(得分:0)

我最近在我的博客上逐步编写了一个演示:http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reactive-extensions-story-code-and-slides/

我基本上是在使用Rx和Bing搜索在WPF中构建一个小应用程序:

enter image description here

该应用程序将等待您停止输入,然后执行异步搜索并显示结果。如果在结果出现之前您发出另一个搜索,它将自动删除现有搜索。

您可以按ENTER或“开始!”强制搜索(跳过等待时间)。按钮,可以按“清除”按钮停止正在进行的搜索。有一个繁忙的指示器和一些错误处理(例如,如果网络出现故障)。

涵盖的主要议题:

  • 从事件创建一个observable(TextChanged,Button.Click等)
  • 异步委托(异步搜索)
  • TakeUntil extension
  • DistinctUntilChanged extension(包括自定义Equals)
  • 合并扩展程序
  • 节气门扩展
  • ObserveOn扩展名(用于UI线程同步)

..等等!