2010-09-17 16 views
1

J'essaye reactive-framework dans un win-form.Comment puis-je filtrer les événements en utilisant 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; 

Je veux filtrer les mouseDrags, seulement les MouseUps plus de 1 seconde après que MouseDowns soit nécessaire. Comment?

Répondre

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

semble bon. Je vais essayer d'accepter la réponse si elle réussit demain. Merci. –