如何在等待多个用户输入时制作倒计时计时器



我正在做一个控制台数学项目,用户可以回答多个数学问题。

我正试图添加一个倒计时计时器,但我找不到如何制作一个计时器,一旦用户回答了所有问题,计时器就会停止;

有人知道怎么做吗?

您可以很容易地用基于System.Threading.Timer的版本替换Thread代码。

我在你的GutHub中重构了你的代码:https://github.com/CrazyDanyal1414/mathstester.git

public class RunWithTimer
{
private DateTime _finish { get; set; }
public bool IsTimeLeft { get=> _finish > DateTime.Now; }
private System.Threading.Timer _timer = null;
private void TimerCallback(object state)
{
string timeLeft = (_finish - DateTime.Now).ToString(@"hh:mm:ss");
WriteToScreen($"Time Remaining: {timeLeft}", true);
if (!this.IsTimeLeft)
{
_timer.Dispose();
}
}
public RunWithTimer(int numberOfSeconds)
{
_finish = DateTime.Now.AddSeconds(numberOfSeconds);
_timer = new Timer(TimerCallback, null, TimeSpan.Zero, TimeSpan.FromSeconds(1.0));
}
public void StopTimer(int numberOfQuestionsLeft)
{
if (numberOfQuestionsLeft == 0)
{
_timer.Dispose();
}
}
}

理想情况下,RunWithTimer将实现IDisposable,因为它包含一个变量IDisposable。一旦问题完成,您就可以删除它的StopTimerDispose()代码。

计时器、ProgressBars和类似的程序在Console中工作不太好。在GUI技术中,这种添加几乎是微不足道的。但在Console中执行此操作需要跳过重重关卡。可能会做一个重大的重新设计。

主要问题是,您需要能够接收输入,但不需要阻止代码执行。传统的控制台读取方法都是阻塞到最后。但是有一个变通办法。一种无阻塞等待输入的方法:

https://stackoverflow.com/a/5620647/3346583

这应该会对您有所帮助。虽然这个例子是一个windows窗体应用程序,但您可以使用Timer类来实现您想要的内容。

最新更新