2010-09-17 63 views
1

我在嘗試使用響應式框架。如何使用Throttle過濾事件

IObservable<IEvent<MouseEventArgs>> mouseMoves = Observable.FromEvent<MouseEventArgs>(this, "MouseMove"); 
IObservable<IEvent<MouseEventArgs>> mouseDowns = Observable.FromEvent<MouseEventArgs>(this, "MouseDown"); 
IObservable<IEvent<MouseEventArgs>> mouseUps = Observable.FromEvent<MouseEventArgs>(this, "MouseUp"); 
var pointChanges = mouseMoves.Zip(mouseMoves.Skip(1), (prev, post) => new { Prev = prev, Post = post }); 
var mouseDrags = from d in mouseDowns 
       from p in pointChanges.TakeUntil(mouseUps) 
       select p; 

我想過濾mouseDrags,只有那些在MouseDowns需要後超過1秒的MouseUps。怎麼樣?

回答

2
from d in mouseDowns.Timestamp() 
from p in pointChanges 
    .TakeUntil(mouseUps) 
    .SkipUntil(Observable.Timer(d.Timestamp + TimeSpan.FromSeconds(1.0))) 
select p; 
+0

看起來不錯。如果明天成功,我會盡力接受答案。謝謝。 – 2010-09-17 17:07:30