You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何实现Timer从10秒倒计时至0后自动重启循环?

解决循环倒计时(从10重置)的问题

嘿,我明白你的困扰了——倒计时到0之后直接变成负数,没法自动回到10重新开始是吧?咱们来修正这段代码就行,问题出在你处理重置的逻辑上啦。

原代码的问题

timeLeft < 0时,你写了timer1.Tick += myTimer_Tick;,这不仅不会让倒计时重置,反而会重复绑定Tick事件,导致后续每次触发都会执行多次倒计时逻辑,问题只会越来越糟。我们真正需要做的是重置timeLeft的数值,而不是重复绑定事件。

修改后的代码

首先要确保timeLeft初始值设为10,然后调整Tick事件里的逻辑:

// 先初始化timeLeft为10,放在类的字段里
private int timeLeft = 10;

private void Form1_Load(object sender, EventArgs e)
{
    InitializeComponent();
    timer1.Interval = 1000;
    timer1.Tick += myTimer_Tick;
    timer1.Start();
}

private void myTimer_Tick(object sender, EventArgs e) {
    // 先显示当前剩余时间
    label2.Text = timeLeft.ToString();
    
    // 检查是否已经倒计时到0,是就重置为10,否则减1
    if (timeLeft == 0) {
        timeLeft = 10;
    } else {
        timeLeft -= 1;
    }
}

或者你也可以保留你原来的“先显示再减1”的顺序,只需要在timeLeft变成负数时重置:

private int timeLeft = 10;

private void myTimer_Tick(object sender, EventArgs e) {
    label2.Text = timeLeft.ToString();
    timeLeft -= 1;
    
    // 当timeLeft小于0时,重置回10
    if (timeLeft < 0) {
        timeLeft = 10;
    }
}

逻辑说明

  • 第一种写法:先显示当前时间,然后判断如果是0就直接重置为10,否则减1。这样倒计时会显示10→9→…→0,然后立刻回到10继续循环。
  • 第二种写法:先显示时间,减1后如果变成负数,就重置为10。效果和第一种完全一样,只是逻辑顺序不同。

两种写法都能实现你要的“从10开始倒计时,到0后自动回到10循环”的效果,选哪种都可以~

内容的提问来源于stack exchange,提问作者user14568805

火山引擎 最新活动