代码之家  ›  专栏  ›  技术社区  ›  Cheng Chen

如何使用Throttle过滤事件

  •  1
  • Cheng Chen  · 技术社区  · 15 年前

    我正在尝试一个双赢的反应框架。

    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;
    

    我想过滤鼠标标记,只需要那些鼠标关闭后超过1秒的鼠标标记。怎么用?

    1 回复  |  直到 15 年前
        1
  •  2
  •   PL.    15 年前
    from d in mouseDowns.Timestamp()
    from p in pointChanges
        .TakeUntil(mouseUps)
        .SkipUntil(Observable.Timer(d.Timestamp + TimeSpan.FromSeconds(1.0)))
    select p;