c# - 如何在等待多个用户输入时制作倒数计时器
问题描述
我正在制作一个控制台数学项目,用户可以在其中回答多个数学问题。
我正在尝试添加一个倒数计时器,但我找不到如何制作一个一旦用户回答所有问题就会停止的计时器;
有谁知道如何做到这一点?
解决方案
您可以很容易地将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()
推荐阅读
- php - 将 mysql 查询转换为 Eloquent 查询生成器
- html - 添加`
- powershell - 如何将变量传递给满足 ValidateSet 的函数?
- react-native - expo 构建 web 页面路径
- reactjs - 使用 React 从 CMS 获取数据的最佳方法是防止加载时间?
- vue.js - vue-i18n 延迟加载正在加载所有语言环境
- java - 在 Jpanel 中放置 7 个组件,前 6 个分 3 行 2 列。第三行的最后一个,但在列之间
- c++ - 成员声明中的模板类类型别名替换失败
- java - 使用 Java,如何获得 Huffman 树的编码树?
- python - 如何从用户输入中读取直到在 Python 中找到换行符?