Rx - 暂停Observable.Interval

Luk*_*kas 2 c# system.reactive observable

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

我目前的代码:

var RemainingTimes = Observable
            .Interval(TimeSpan.FromMilliseconds(refreshInterval))
            .Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval))
Run Code Online (Sandbox Code Playgroud)

Eni*_*ity 5

这样做对你有用吗?

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

然后你只需更改pause = truepause = 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();
Run Code Online (Sandbox Code Playgroud)

然后打电话pauser.OnNext(true),pauser.OnNext(false)停下来开始.