我正在替换rx的Observable.Interval上的计时器,我遇到了一个问题。我不知道如何暂停这样的计时器。我不是指暂停订阅,而是暂停和恢复计时。我知道如何以肮脏的方式做到这一点,但我想知道更好的解决方案。
我目前的代码:
var RemainingTimes = Observable
.Interval(TimeSpan.FromMilliseconds(refreshInterval))
.Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval))
答案 0 :(得分:5)
这样做对你有用吗?
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)
即可停止并开始。