c# - 定时器在 C# 中没有被重置

标签 c# winforms timer

您好,我在 C# win 窗体应用程序中重置 Timer 控件时遇到问题。

我正在开发一个简单的倒数计时器。

Sample

当我点击 start 时,它从 59 秒开始倒计时。 当我点击 Start 按钮时,我需要计时器应该从头开始重新启动。

关于timer1_tick的代码

if (hours==0 && minutes==0 && seconds==0)
{
    hours = 0;
    minutes = 1;
    seconds = 0;
}
else
{
    if (seconds < 1)
    {
        seconds = 59;
        if (minutes == 0)
        {
            minutes = 59;
            if (hours != 0)
               hours -= 1;
        }
        else
        {
            minutes -= 1;
        }
    }
    else
        seconds -= 1;

    lblTime.Text = hours + @":" + minutes + @":" + seconds;
}

btnStart_Click 上的代码

timer1.Enabled = false;
timer1.Enabled = true;

在这里,我试图通过启用和禁用 control 来重新启动 timer1,但它不起作用。 我也尝试检查

timer1.Stop();
timer1.Start();

但它又从弯腰的地方开始。

我们如何解决这个问题?

最佳答案

我建议您存储代表目标时间(当前时间加一分钟)的 DateTime 值:

// or DateTime.Now.AddMinutes(1)
targetTime = DateTime.Now.Add(TimeSpan.FromMinutes(1));

然后在每个计时器刻度上从目标时间减去当前时间并显示 TimeSpan 您将拥有:

var span = targetTime - DateTime.Now;

if (span.TotalSeconds > 0)
   lblTime.Text = span.ToString(@"hh\:mm\:ss");
else
   lblTime.Text = "Bingo!";

因此,您将不需要存储和维护小时、分钟和秒这三个变量。

关于c# - 定时器在 C# 中没有被重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20704222/

相关文章:

c# - 两个输出文件名解析为相同的输出

java - TimerTask执行后会发生什么?

c# - 递归下降解析

c# - 仅当特定攻击动画完成查询时才使对象实例化

c# - 以编程方式将多个 SQL 列组合并存储到一个列中

c# - 如何使用 .net 在远程计算机上启动/停止/重新启动 Windows 服务

c# - 更新条目向数据库添加一个新条目

.net - 免费语法突出显示 .NET 编辑器

java - 乒乓球游戏 - 为球动画添加计时器

delphi - 如何创建一个可与 VCL 和 FMX 一起使用的内部计时器?