.NET的响应式框架示例,证明其有用性

9

最近.NET 4.0中的响应式框架引起了很大的关注。虽然我认为我理解了它的基本概念,但我并不完全认同它的实用性。你能否提供一个好的例子(易于理解),充分展示Rx的强大和实用性?展示一些使用Rx可以让生活变得更加容易的东西。


请看这里的一个例子:https://dev59.com/zXI-5IYBdhLWcg3w9tdw#1749252 - Benjol
1
推送什么时候有用?拉取什么时候有用? - Richard Anthony Freeman-Hein
2个回答

10

这里是一个快速的示例。使用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),
                           };

从起始位置到当前位置画一条线

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

正如您所见,代码中没有到处都是事件处理程序,也没有布尔变量来管理状态。

如果您对 GetEventName() 方法感到好奇,建议您阅读整篇文章并下载源代码进行实验。

在此处阅读并使用源代码进行实验 >>


非常详细的答案,但不太容易理解。我需要阅读一些资料... - bitbonk
这个问题只是举个例子。如果你想了解基础知识,这里有一篇不错的文章 - http://amazedsaint.blogspot.com/2009/11/systemreactive-or-net-reactive.html - amazedsaint

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或“Go!”按钮来强制搜索(跳过等待时间),并且可以通过按Clear按钮来停止正在进行的搜索。有繁忙指示器和一些错误处理(例如,网络中断)。

主要涵盖的主题:

  • 从事件(TextChanged、Button.Click等)创建可观察对象
  • 异步委托(异步搜索)
  • TakeUntil扩展
  • DistinctUntilChanged扩展(包括自定义Equals)
  • Merge扩展
  • 节流扩展
  • ObserveOn扩展(用于UI线程同步)

..等等!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接