【问题标题】:How to count down and display time before next timer tick?如何在下一个计时器滴答之前倒计时并显示时间?
【发布时间】:2012-01-10 00:26:04
【问题描述】:

我正在尝试使用一个计时器,它每 5 秒或按用户指定的时间间隔执行一次操作。

现在,我想要一个函数,它会以 10 毫秒的间隔倒计时,直到第一个计时器的滴答声。我玩过并找到了一种简单的方法,即计算第一个计时器滴答间隔的 1/10,但是在计算数字时并不代表任何东西。

这种倒计时怎么做?

这就是我现在的样子,但我想改变它:

    private void tmrClickInterval_Tick(object sender, EventArgs e)
    {
        if (nudPlusMinus.Value == 0) tmrClickInterval.Interval = int.Parse(nudClickInterval.Value.ToString());
        else tmrClickInterval.Interval = random.Next(int.Parse(nudClickInterval.Value.ToString()) - int.Parse(nudPlusMinus.Value.ToString()), int.Parse(nudClickInterval.Value.ToString()) + int.Parse(nudPlusMinus.Value.ToString()));

        if (tmrClickInterval.Interval / 10 == 0) tmrNextClick.Interval = 1;
        else tmrNextClick.Interval = tmrClickInterval.Interval / 10;
        tmrNextClick.Start();
        content++;
        nextClick = tmrClickInterval.Interval;
        label1.Text = content.ToString();
    }

    private void tmrNextClick_Tick(object sender, EventArgs e)
    {
        if (nextClick <= 0) tmrNextClick.Stop();
        else
        {
            nextClick = nextClick - (tmrClickInterval.Interval / 10);
            lblNextClickCount.Text = (nextClick / 100).ToString();
        }
    }

【问题讨论】:

    标签: c# timer


    【解决方案1】:

    首先,我不确定您到底要做什么,同样以 10 毫秒为间隔,您正在推动计时器的最小分辨率。请参阅此SO question。话虽这么说,您可以尝试使用 Diagnostics.Stopwatch 类来计算 Tick 事件之间的时间间隔。像这样的:

    private void tmrClickInterval_Tick(object sender, EventArgs e)
        {
            stopWatch.Stop();
            stopWatch.Reset();         
            stopWatch.Start();
            tmrNextClick.Start();
            content++;
            label1.Text = content.ToString();
        }
    
        private void tmrNextClick_Tick(object sender, EventArgs e)
        {
            nextClick = (((tmrClickInterval.Interval) - stopWatch.ElapsedMilliseconds) / 10) * 10;
            if (!(nextClick < 0))
            {
                lblNextClickCount.Text = nextClick.ToString();
            }
        } 
    

    【讨论】:

      【解决方案2】:

      您似乎正在尝试计算两个间隔,一个长间隔和一个短间隔,其中长间隔是短间隔的倍数。

      如果效率不是最重要的(不太可能),那么我想我将只有一个计时器来计时更短的时间间隔。您知道有多少“短滴答声”等于一个“长滴答声”,所以只需计算有多少短滴答声,当您有足够的时间时,触发您的“长滴答声事件”。

      使用两个计时器,您可以获得各种比赛条件。您的“短滴答”可能会在“长滴答”之前触发,或者它可能以相反的方式发生。这两个计时器可能彼此之间存在抖动(尽管它们平均而言是正确的),因此不知道在任何给定时间哪个会先触发。使用一个计时器,您可以控制所有这些因素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多