.NET RX在一段时间内首先和最后一项



我们有一个用户可以拖动的图表。在鼠标移动中,我们有一个事件,该事件设置了一个属性,该属性触发了新的和旧值(在其他地方需要)。

public double Value
{
    get { return _value; }
    set
    {
        if(ShouldUpdate && value!=_value)
            _subject.OnNext(factoryMethod(this, value, _value, Index));
        _value = value;
    }
}

我需要获得拖动的第一和最后一项。最后,我假设事件之间的停顿为250毫秒。

即。用户开始拖动第一个事件正在存储下一个事件。当他停止拖动并且没有新事件出现250ms的新事件时,称为订阅,其中包含首先和最后一个元素的列表。当用户开始再次创建新的新拖动时,正在创建新的新事物(我不在乎旧值)。

好的,在更多外观和调整现有示例之后,我设法提出了一个似乎有效的解决方案。

public static IObservable<IList<TSource>> FirstAndLast<TSource>(this IObservable<TSource> source, TimeSpan threshold)
{
    return Observable.Create<IList<TSource>>((obs) =>
    {
        return source.GroupByUntil(_ => true,
            g => g.Throttle(threshold).Select(_ => Unit.Default))
            .SelectMany(i => i.ToList().Select(_=> new List<TSource> {_.First(), _.Last()}))
            .Subscribe(obs);
    });
}

相关内容

  • 没有找到相关文章

最新更新