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