gpt4 book ai didi

c# - Rx - 暂停 Observable.Interval

转载 作者:行者123 更新时间:2023-12-02 13:45:32 26 4
gpt4 key购买 nike

我正在替换 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 = truepause = 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) 即可停止和启动。

关于c# - Rx - 暂停 Observable.Interval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35528776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com