我正在更换rx的Observable.Interval上的计时器,我遇到了一个问题。我不知道如何暂停这样的计时器。我指的不是暂停订阅,而是暂停和恢复计时。我知道如何以肮脏的方式做到这一点,但我想知道也许更好的解决方案。
我当前的代码:
var RemainingTimes = Observable
.Interval(TimeSpan.FromMilliseconds(refreshInterval))
.Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval))发布于 2016-02-21 11:50:55
做这件事会对你有好处吗?
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 = 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)来停止和启动。
https://stackoverflow.com/questions/35528776
复制相似问题