繁体   English   中英

Rx-暂停Observable.Interval

[英]Rx - pause Observable.Interval

我正在替换rx的Observable.Interval上的计时器,遇到了问题。 我不知道如何暂停这样的计时器。 我的意思不是暂停订阅,而是暂停和恢复计时。 我知道如何以肮脏的方式进行此操作,但我想知道更好的解决方案。

我当前的代码:

var RemainingTimes = Observable
            .Interval(TimeSpan.FromMilliseconds(refreshInterval))
            .Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval))

会为您做这项工作吗?

var pause = false;
var RemainingTimes =
    Observable
        .Interval(TimeSpan.FromMilliseconds(refreshInterval))
        .Where(x => pause == false)
        .Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval));

然后,您只需将pause = true更改pause = true pause = false即可将其关闭。

如果您想真正地启动和停止计时器而无需重新订阅,则可以采用以下方法:

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)即可停止和启动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM