簡體   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