2011-09-09 2 views
0

이것은 mouseleftbuttondown과 mouseleftbuttonup까지 마우스 움직임을 모니터하는 코드입니다.Rx 확장을 사용하여 이해하지만이 PUSH 모델은 무엇입니까?

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 모델을 따릅니다. 정확히 무엇을 밀어 넣고 있습니까?

답변

3

이벤트는이 코드에서 PUSH입니다. 관찰 가능한 것으로 변환 된 모든 다양한 마우스 이벤트는 해당 이벤트가 발생할 때마다 이벤트 데이터를 코드로 푸시합니다.

일부 데이터 소스가 데이터를 소비자에게 알려주는 경우 여기에서 PUSH 모델을 처리 할 데이터가 더 많습니다. 데이터 소스에 풀 모드 인 데이터를 요청할 때. 이벤트는 PUSH 모델의 첫 번째 예입니다.

Subscribe 메서드를 사용하면 구독을 사용하면 일부 데이터 (이 경우 마우스 이벤트)를 사용할 수있을 때마다 PUSH 데이터 소스에서 코드를 알리므로 다음 코드 줄이 실행되기 시작합니다. 그래서 구독은 차단되지 않습니다)

관련 문제