首页 > 解决方案 > 如何在等待多个用户输入时制作倒数计时器

问题描述

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

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

有谁知道如何做到这一点?

标签: c#timeruser-input

解决方案


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

我在您的 GutHub 中重构了您的代码:https ://github.com/CrazyDanyal1414/mathtester.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. 然后,您将在问题完成后删除StopTimer代码和其中的代码。Dispose()


推荐阅读