什么是LINQ to events(即RX Framework)?

Ahm*_*med 30 linq events reactive-programming system.reactive

什么是LINQ to events又名RX Framework又名.NET 4.0中的Reactive Extensions(但也可作为backported版本提供)?

换句话说,System.Reactive.dll中的所有内容是什么?

ama*_*int 25

.NET Rx团队(这不是官方名称)发现任何推送序列(事件,回调)都可以被视为拉序列(就像我们通常在访问枚举时一样) - 或者它们本质上是双重的.简而言之,观察者/可观察模式是枚举模式的双重性.

那么对于这种二元性有什么好处呢?

使用Pull序列(读取声明式样式编码)所做的任何事情也适用于推送序列.这里有几个方面.您可以从现有事件创建Observable,然后将它们用作.NET中的一等公民 - 即,您可以从事件创建一个observable,并将其作为属性公开.

由于IObservable是IEnumerable的数学对偶,因此.NET Rx有助于LINQ over推送序列,如事件,就像LINQ over IEnumerables

它为组成新事件提供了更大的自由 - 您可以从一般事件中创建特定事件.

.NET Rx引入了两个接口,IObservable和IObserver,"提供了使用输入和输出适配器作为事件源和接收器的生产者和消费者的替代方案",这很快将成为以声明方式编写异步代码的事实.这是一个简单的例子.

//Create an observable for MouseLeftButtonDown

var mouseLeftDown=Observable.FromEvent<MouseButtonEventArgs>  
        (mycontrol,"MouseLeftButtonDown");  

//Query the above observable just to select the points
var points = from ev in mouseEvents  
                 select ev.EventArgs.GetPosition(this);  

//Show points in the window's title, when ever user
//presses the left button of the mouse
points.Subscribe(p => this.Title = "Location ="  
                                        + p.X + "," + p.Y);
Run Code Online (Sandbox Code Playgroud)

你也可以通过这些帖子来详细了解头部和尾部.另外还要看一下相关的源代码.

看看这组文章

  • 在你的例子中,在"var points = from evE mouseEvents"中,"mouseEvents"来自哪里,它是什么类型的? (5认同)

dah*_*byk 6

另外,请观看第 9 频道的视频:专家对专家:Brian Beckman 和 Erik Meijer - Inside the .NET Reactive Framework (Rx)

从节目描述来看:

.NET Reactive Framework (Rx) 是 LINQ to Objects 的数学对偶。它由一对表示基于推送或可观察集合的接口 IObserver/IObservable 以及一个实现 LINQ 标准查询运算符和其他有用的流转换函数的扩展方法库组成。


Jam*_*ack 5

你可以在这里阅读更多相关信息:http: //themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html

我第一次曝光是在这个博客上,因为我正在读他关于F#的书:http: //tomasp.net/articles/reactive-ii-csevents.aspx

基本上我对它的理解是,例如,当您为鼠标移动编写事件处理程序时,您可能想要连续捕获这些事件,也许能够计算移动或点击的次数,但基本上,您想要使用它信息的方式多于事件处理程序.因此,只需将事件视为连续流.