这是我的代码,监视鼠标移动后mouseleftbuttondown和直到mouseleftbuttonup:
var downs = Observable.FromEventPattern<MouseEventArgs>(this, "MouseLeftButtonDown");
var ups = Observable.FromEventPattern<MouseEventArgs>(this, "MouseLeftButtonUp");
var moves = Observable.FromEventPattern<MouseEventArgs>(this, "MouseMove").SkipUntil(downs).TakeUntil(ups).Repeat();
moves.Subscribe(me => {
Point pt = me.EventArgs.GetPosition(null);
tbPoints.Text += "X :" + pt.X + " Y :" + pt.Y + "t";
});
所有的工作都很好,但我不明白这里是什么是PUSH ?我读IEnumerable遵循PULL模式和IObservable遵循PUSH模型。推到底是什么?
此代码中的事件为PUSH。当事件发生时,你转换为可观察对象的所有鼠标事件都会将事件数据推送到你的代码中。
当某个数据源告诉数据的使用者这里有更多的数据需要您处理时,这是PUSH模式,当您向数据源请求数据时,这是pull模式。事件是PUSH模型的第一类例子。
在订阅方法之后,您的下一行代码将开始执行,因为使用订阅,您已经要求PUSH数据源告诉您的代码何时某些数据(在本例中是鼠标事件)可用(这将在将来发生,因此订阅不会阻塞)