在特定时间后执行操作,但如果手动调用,请重置计时器



我用System.Timers.Timer每10秒执行一次动作。如果出现某些特殊情况,也可以通过其他方法或通过 UI 调用此操作。如果未从计时器调用该操作,我只需重置计时器。

我正在使用的代码...

timer = new Timer();
timer.Elapsed += (sender, args) => ExecuteAction();
timer.Interval = 10000;
timer.Enabled = true;
public void ExecuteActionAndResetTimer()
{
ExecuteAction();
timer.Stop();
timer.Start();
}
private void ExecuteAction()
{
// do the work...
}

预期结果,如果"X"是从计时器调用的操作(即ExecuteAction(,">X"是从外部计时器调用的操作(即ExecuteActionAndResetTimer( 和 'o' 是第二个:

呜呜

��这工作正常。我只想知道我们可以使用反应式扩展来做到这一点吗?

谢谢。

是的,这很容易用 Rx 完成。

方法如下:

var subject = new Subject<char>();
var query =
subject
.StartWith('X')
.Select(c =>
Observable
.Interval(TimeSpan.FromSeconds(10.0))
.Select(n => 'X')
.StartWith(c))
.Switch();
query.Subscribe(x => Console.Write(x));
Thread.Sleep(5000);
subject.OnNext('Q');
Thread.Sleep(15000);
subject.OnNext('W');

这就产生了序列XQXWXXXX,最后的X是无限的。

相关内容

  • 没有找到相关文章

最新更新