[英]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.