如何制作一个精准的十进制计时器?我对此感到非常沮丧。我有一个名为timer1的计时器和一个名为TimeElapsedTextBox的文本框以及一个名为TimeElapsedTextBox的双变量,计时器在文本框中每1秒(1000毫秒)滴答一次,我希望它在此显示时间格式:Seconds.PartsOfSecond这是Tick事件:privatevoidtimer1_Tick(objectsender,EventArgse){TimeTakenToFinish+=(double)timer1.Interval/10000;TimeElapsedTextBox.Text=TimeTakenToFinish;它实际上上面是按照我想要的方式在文本框中显示它,但它没有正确计算..我的意思是,它没有计算真正的秒..你能告诉我如何解决这个问题吗?这里的问题是对操作系统如何工作的误解。当然,您可以将间隔设置为1000毫秒,但您不能指望它实际上每秒滴答作响。您在Windows上运行您的代码,而不是硬(或软)实时操作系统。此外,您应该知道计时器的分辨率是有限的,并且截至今天,仅限于系统计时器的精度,大概在15毫秒左右。您不能期望您的代码在此环境中确定性地执行。在任何时候,操作系统都可以先发制人地将您从CPU中解放出来并开始处理其他任务。尽管我会问,但您根本无法获得所需的准确性;真的需要吗?可能不是,但是您还没有告诉我们您在这里想要实现的目标,所以谁知道呢?这也是错误的:TimeTakenToFinish+=(double)timer1.Interval/10000;Interval是一个属性,它告诉计时器大致应该多久触发一次Tick事件。您实际上并没有测量任何东西,您也可以每次将1000.0/10000添加到您的计数器。如果需要更高的精度,请使用StopWatch类,它使用CPU的高性能计时器(如果可用)。您仍然可以使用计时器根据秒表的当前经过值定期更新UI,即voidtimer1_Tick(...){vartotalSeconds=_someStopwatch.ElapsedMilliseconds/1000.0;TimeElapsedTextBox.Text=totalSeconds.ToString();}而不是使用计时器,使用DateTime.Now记录开始时间,然后从开始时间减去当前时间(DateTime.Now)。这将为您提供更准确的计时器,因为它使用系统时钟并且不受CPU性能的影响。或者,您可以使用System.Diagnostics.Stopwatch为您完成。您仍然可以使用间隔小于一秒的普通计时器来刷新显示时间的标签。以上就是C#学习教程:如何制作一个精准的十进制定时器?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
