【问题标题】:How to count down time until timer's next tick?如何倒计时直到计时器的下一个滴答声?
【发布时间】:2012-01-09 16:49:33
【问题描述】:

我有 2 个计时器。其中之一是在每次滴答作响时计数;而使用稳定的间隔,或一个随机生成。第二个计时器倒计时到第一个计时器的下一个滴答声。

目前我正在这样做:

    private void btnStart_Click(object sender, EventArgs e)
    {
        nextClick = int.Parse(nudClickInterval.Value.ToString());

        if (nudPlusMinus.Value != 0) tmrClickInterval.Interval = random.Next( int.Parse(nudClickInterval.Value.ToString()) - int.Parse(nudPlusMinus.Value.ToString()), int.Parse(nudClickInterval.Value.ToString()) + int.Parse(nudPlusMinus.Value.ToString()));
        else tmrClickInterval.Interval = int.Parse(nudClickInterval.Value.ToString());

        tmrClickInterval.Start();
    }

    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()));

        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();
        }
    }

我通过使用第一个计时器的间隔除以 10 来设置倒计时计时器的间隔。问题是我不断收到一些错误,例如:Value '0' is not a valid value for Interval. Interval must be greater than 0. at line:tmrNextClick.Interval = tmrClickInterval.Interval / 10;

我不确定如何避免我的错误,所以我认为可能有更好的方法来倒计时直到下一个计时器滴答作响。另外,我希望以稳定的间隔倒计时,但我很困惑,不知道如何解决这个问题。

希望得到一些帮助。

【问题讨论】:

    标签: c# timer


    【解决方案1】:

    System.Windows.Forms.Timer 有一个 int 间隔。将小于 10 的数字除以 10 得到 0(整数除法!)。

    尝试使用System.Timers.Timer,它有一个double类型的区间,或者在这种情况下检查0并分配1。

    【讨论】:

    • 感谢您建议尝试使用双倍版本的计时器间隔。可能有用。
    • 顺便说一句。一个快速的问题。允许的最小计时器间隔是多少?
    • 使用 System.Windows.Forms.Timer 其 1,对于 System.Timers.Timer 这家伙说它的 1 / 64 秒 eggheadcafe.com/community/ask-dr-dotnetsky/12/61662/…
    • 微软的文档说,如果“间隔小于或等于零”,它会抛出一个异常。但最低分辨率可能取决于具体的硬件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多