繁体   English   中英

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

[英]Calling timer multiple times has strange result

当我按下button1时,制表符的值立即从8变为1,然后timer1_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的值都按预期下降了一个,但是当我运行程序时,使用timer1_tick方法将其立即变为1继续运行。

我的工作代码如下:

           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变量随时间推移而变小,请删除循环并在计时器事件处理程序中减小该变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM