C# 多次调用计时器会产生奇怪的结果

C# 多次调用计时器会产生奇怪的结果,c#,C#,当我按下按钮1时,tabatas的值立即从8变为1,然后timer1\u tick方法正确运行一次 int goSecondsLeft = 20; int restSecondsLeft = 10; int tabatas = 8; public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e)

当我按下按钮1时,tabatas的值立即从8变为1,然后timer1\u tick方法正确运行一次

int goSecondsLeft = 20;
    int restSecondsLeft = 10;
    int tabatas = 8;

    public Form1()
    {
        InitializeComponent();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {

        if (goSecondsLeft >= 0)
        {
            lbGoOrRest.Text = "Go!";
            lbSecondsRemaining.Text = goSecondsLeft.ToString() + " seconds";
            goSecondsLeft--;
        }
        else if (restSecondsLeft >= 0)
        {
            lbGoOrRest.Text = "Rest";
            lbSecondsRemaining.Text = restSecondsLeft.ToString() + " seconds";
            restSecondsLeft--;
        }
        else
        {
            timerGo.Stop();

        }   

    }    

    private void button1_Click(object sender, EventArgs e)
    {
        while (tabatas > 0)
        {
            lbTabatasRemaining.Text = "Tabatas remaining" + tabatas.ToString();
            timerGo.Start();
            tabatas--;
        }
    }
我在while(tabataas>0)行上放置了一个断点,并不断地进行干预,每次while循环执行时,tabata的值都会按预期下降一个,但当我运行程序时,它会立即变为1,而timer1_tick方法会继续运行

我的工作代码如下:

           else
        {
            goSecondsLeft = 20;
            restSecondsLeft = 10;
            tabatas--;
            lbTabatasRemaining.Text = "Tabatas remaining" + tabatas.ToString();
            timerGo.Stop(); 
        }   

    }    

    private void button1_Click(object sender, EventArgs e)
    { 
            timerGo.Start();
    }

您的
while
循环中没有引起延迟的内容,因此它几乎是在瞬间运行的。也许你认为
Timer.Start
会阻塞一段时间,但事实并非如此。它只是在后台启动计时器并立即返回


不确定您到底想做什么,但如果希望
tabatas
变量沿时间向下勾选,请删除循环并在计时器事件处理程序中减少变量。

可能是线程相关的问题。为什么要在循环中重新启动计时器?还有,计时器的间隔是多少?间隔是1000ms,我希望time1Tick方法中的代码执行8次。我尝试在tick处理程序中递减tabata变量,但我不知道如何在每个tick都发生一次。我猜这是某种间隔计时器。你应该在你的代码中有一个地方,当你的“休息”阶段结束时,你可以将你的go/rest计数器重置为最大值-也许在那里减少它?是的,我在else语句中更改了代码,重置变量并减少tabata变量,它工作得非常好。