1

我正在尝试制作一个计时器表单应用程序,该应用程序既可以用作秒表,也可以用作倒计时并勾选一个选项。问题是我似乎无法绘制毫秒。现在,没有毫秒,Tick 方法看起来像这样:

    private void timer_Tick(object sender, EventArgs e)
    {
        if (timespan.TotalSeconds > 0)
        {
            timespan = timespan.Add(new TimeSpan(0, 0, -1));
            updateNumericUpDowns();
        }
        else
        {
            timerCountown.Stop();
        }
    }

更新UI的方法:

    private void updateNumericUpDowns()
    {
        numericUpDownSeconds.Value = Convert.ToInt32(timespan.Seconds);
        numericUpDownMinutes.Value = Convert.ToInt32(timespan.Minutes);
        numericUpDownHours.Value = Convert.ToInt32(timespan.Hours);
    }

帮助表示赞赏,tnx大家!

4

2 回答 2

2

不确定我是否在关注。为什么不直接使用timespan.Milliseconds

实际上,您使用的是小时、分钟和秒。如果要显示毫秒,请添加。

于 2012-08-23T00:28:07.103 回答
2

我不认为我会相信毫秒分辨率的“timer_Tick”:如果系统负载很重,滴答声会比 1 秒慢还是快?(这会影响经过的毫秒数吗?)尝试将当前时间与已知的开始时间进行比较。

private DateTime startTime;

void StartTimer() {
    startTime = DateTime.Now;
    //start timer
}

private void timer_Tick(object sender, EventArgs e)
{
    var currentTime = DateTime.Now;
    timespan = currentTime - startTime; //positive
    bool hasCountdownTerminated = ... //maybe something like timespan < duration + timerResolution
    if (hasCountdownTerminated)
    {
        timerCountown.Stop();
    }
    else
    {
        updateNumericUpDowns();
    }
}    

void updateNumericUpDowns() {
    //use timespan.Milliseconds;
}
于 2012-08-23T00:31:36.987 回答