这是我的代码,它监控鼠标在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";
});一切都很顺利,但我不明白的是,这里面的推是什么?我读到IEnumerable遵循PULL模式,IObservable遵循PUSH模式。这里面的push到底是什么?
发布于 2011-09-09 12:22:11
在此代码中,事件是推送的。当事件发生时,您已转换为observable的所有各种鼠标事件都会将事件数据推送到代码中。
当一些数据源告诉数据的消费者这里有更多的数据要处理时,这就是推模式,当你向数据源请求数据时,这就是拉模式。事件是推送模型的第一类示例。
在Subscribe方法之后,您的下一行代码将开始执行,因为使用Subscribe时,只要有一些数据(在本例中是鼠标事件)可用时,您已经要求推送数据源告诉您的代码(这将在将来发生,因此subscribe不会阻塞)
https://stackoverflow.com/questions/7356965
复制相似问题