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