Разобрался с использованием Rx Extensions, но что такое модель PUSH в этом? - PullRequest
0 голосов
/ 09 сентября 2011

Это мой код, который отслеживает движения мыши после нажатия кнопки мыши и до нажатия кнопки мыши:

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. Что именно толкает в этом?

1 Ответ

3 голосов
/ 09 сентября 2011

В этом коде события PUSH.Все различные события мыши, которые вы конвертировали в наблюдаемые, передают данные о событиях в ваш код всякий раз, когда происходит это событие.

Когда какой-либо источник данных сообщает потребителю о данных, что здесь есть больше данных для обработки, то есть PUSHмодель, когда вы запрашиваете источник данных для данных, что режим извлечения.События являются первоклассным примером модели PUSH.

После метода Subscribe ваша следующая строка кода начнет выполняться, потому что с помощью Subscribe вы попросили источник данных PUSH сообщать вашему коду всякий раз, когда какие-либо данные (в данном случае мышь).событие) (что произойдет в будущем, поэтому подписка не блокируется)

...