9

围绕.NET 4.0 中的新Reactive Framework有不少炒作。虽然我认为我没有理解它的基本概念,但我并不完全相信它是如此有用。你能想出一个很好的例子(这个例子很容易理解),完全展示了 Rx 的力量和有用性吗?展示一些在使用 Rx 后让生活变得如此轻松的东西。

4

2 回答 2

10

这是一个简单的例子。使用 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() 方法感到好奇,建议您阅读整篇文章并下载源代码并使用它。

在此处阅读并使用源代码>>

于 2009-11-18T14:32:54.407 回答
0

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

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

在此处输入图像描述

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

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

涵盖的主要主题:

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

.. 和更多!

于 2013-06-01T20:55:45.417 回答