首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rx - pause Observable.Interval

Rx - pause Observable.Interval
EN

Stack Overflow用户
提问于 2016-02-21 04:43:57
回答 1查看 1.7K关注 0票数 2

我正在更换rx的Observable.Interval上的计时器,我遇到了一个问题。我不知道如何暂停这样的计时器。我指的不是暂停订阅,而是暂停和恢复计时。我知道如何以肮脏的方式做到这一点,但我想知道也许更好的解决方案。

我当前的代码:

代码语言:javascript
复制
var RemainingTimes = Observable
            .Interval(TimeSpan.FromMilliseconds(refreshInterval))
            .Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval))
EN

回答 1

Stack Overflow用户

发布于 2016-02-21 11:50:55

做这件事会对你有好处吗?

代码语言:javascript
复制
var pause = false;
var RemainingTimes =
    Observable
        .Interval(TimeSpan.FromMilliseconds(refreshInterval))
        .Where(x => pause == false)
        .Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval));

然后,您只需更改pause = truepause = false以将其关闭并打开。

如果你想实际启动和停止计时器,而不需要重新订阅,那么这是一种方法:

代码语言:javascript
复制
var pauser = new Subject<bool>();
var RemainingTimes =
    pauser
        .StartWith(true)
        .Select(b => b
            ? Observable.Empty<DateTime>()
            : Observable
                .Interval(TimeSpan.FromMilliseconds(refreshInterval))
                .Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval)))
        .Switch();

然后只需调用pauser.OnNext(true)pauser.OnNext(false)来停止和启动。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35528776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档