Luk*_*kas 2 c# system.reactive observable
我正在替换rx的Observable.Interval上的计时器,我遇到了一个问题.我不知道如何暂停这样的计时器.我不是指暂停订阅,而是暂停和恢复计时.我知道如何以肮脏的方式做到这一点,但我想知道更好的解决方案.
我目前的代码:
var RemainingTimes = Observable
.Interval(TimeSpan.FromMilliseconds(refreshInterval))
.Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval))
Run Code Online (Sandbox Code Playgroud)
这样做对你有用吗?
var pause = false;
var RemainingTimes =
Observable
.Interval(TimeSpan.FromMilliseconds(refreshInterval))
.Where(x => pause == false)
.Select(t => _provider.Duration - TimeSpan.FromMilliseconds(t * refreshInterval));
Run Code Online (Sandbox Code Playgroud)
然后你只需更改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();
Run Code Online (Sandbox Code Playgroud)
然后打电话pauser.OnNext(true),pauser.OnNext(false)停下来开始.