定时器没有在C#中复位

时间:2013-12-20 13:02:50

标签: c# winforms timer

您好我在C#win form应用程序中重置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;

此处我尝试通过启用和停用timer1来重新启动control,但它无效。 我也尝试用

来检查
timer1.Stop();
timer1.Start();

但它从弯腰的地方再次开始。

我们如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

我建议您存储代表目标时间的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!";

因此,您无需为小时,分钟和秒存储和维护三个变量。

答案 1 :(得分:2)

使用

timer1.Dispose();
timer1 = new System.Windows.Forms.Timer();

摆脱对象并重新初始化。

我希望这会有所帮助。

答案 2 :(得分:2)

在您的btnStart_Click中,您应该重置实例变量

hours=minutes=seconds=59

答案 3 :(得分:2)

hoursminutesseconds定义在哪里?

看起来你的btnStart_Click只需重置这些值而不是重置计时器。

我无法从你的问题中看出这些默认值应该是什么。你说计时器应该从59 秒开始倒计时,但是后来我看到将分钟重置为59的逻辑和其他减少小时的逻辑(尽管小时似乎从0开始并且从不增加)。

答案 4 :(得分:1)

if (timer1.Enabled) { timer1.Enabled = false; }
else { minutes = 1; seconds = 0; timer1.Enabled = true; }

如果您想重置为1分钟,请将其设置为btnStart_Click功能

注意:对于seconds当它变为0时,它会再次增加到59,尽管你的minutes 0,你必须验证它

if (minutes == 0 && seconds == 0)
{
     timer1.Enabled = false;
     //this your code to reset variable hours, minutes, and seconds
}

在函数timer1_tick()

中使用此函数