日期时间作为计时表

Date Time as Choronometer

即使有很多关于日期时间的问题和答案,我也找不到我要找的东西。让我解释一下我的问题我创建了一个计时器(间隔 10 毫秒)作为 "zaman" 但我的程序编译速度不如实时 chronometer.It 没有给出可靠的结果(这也是一个问题)。因此我想使用 Date Time 函数作为计时器使用,但有一个问题:我无法让它们从 00:00:00.00(hh:mm:ss.ff) 开始。我想这样做,因为通过使用时间数据程序绘制实时数据并且对于每次测量它必须从零开始直到测量结束(经过时间)。这是我关于使用计时器的代码(不是可靠的)。可以你帮助如何使它更准确或如何使 date.time.now 从 00:00:00.00?
开始 salise=毫秒,saniye=秒,dakika=分钟

private void zaman_Tick(object sender, EventArgs e)
    {   
            salise = Convert.ToInt32(lblsalise.Text);
            if (salise < 99)
            {
                lblsalise.Text = Convert.ToString(salise + 1);
            }
            else
            {
                lblsalise.Text = "00";
                saniye = Convert.ToInt32(lblsaniye.Text);
                if (saniye < 59)
                {
                    lblsaniye.Text = Convert.ToString(saniye + 1);
                }
                else
                {
                    lblsaniye.Text = "00";
                    dakika = Convert.ToInt32(lbldakika.Text);
                    if (dakika < 59)
                    {
                        lbldakika.Text = Convert.ToString(dakika + 1);
                    }
                    else
                    {
                        lbldakika.Text = "00";
                    }
                }
            }
            lblzaman.Text = lbldakika.Text + ":" + lblsaniye.Text + ":" + lblsalise.Text;



        }

我认为你最好使用这样的东西,使用 Stopwatch

var stopwatch = System.Diagnotics.Stopwatch.StartNew();

private void zaman_Tick(object sender, EventArgs e)
{   
    lblzaman.Text = stopwatch.Elapsed.ToString();
}

Stopwatch.Elapsed 的值是 TimeSpan,在某些示例中可以是 formatted in many different ways, see


如果您希望 lblzaman 以精确的时间间隔更新,那么您应该调查使用 System.Timers.Timeror maybe, System.Threading.Timer 作为您的事件源,在后台线程上,但请记住,您需要处理跨线程调用关于 UI 更新。

所有计时器都是倾斜的,这意味着尝试通过递增秒和分钟来计算 已用时间将在某些时候导致无效值。

应用程序使用 Stopwatch class to measure elapsed time. This class doesn't count anything. When it starts, it stores the value of a high resolution performance counter in ticks. When you request the Elapsed 时间,它检索当前正常运行时间并计算差异。

之后,设置标签只是格式化 Elapsed 属性 返回的 TimeSpan 值的问题,例如:

Stopwatch _watch=new Stopwatch();

public void Start()
{
    _watch.Start();
}

private void zaman_Tick(object sender, EventArgs e)
{ 
  var time=_watch.Elapsed;
  lblFull.Text =  time.ToString(@"hh\:mm\:ss\.ff");
  lblHours.Text=  time.ToString(@"hh");
  lblMinutes.Text=  time.ToString(@"mm");
  lblSecs.Text=  time.ToString(@"ss");
  lblMs.Text=  time.ToString(@"ff");
}