Vb.net 为什么我用VB编写的计时器程序不是';不准确?

Vb.net 为什么我用VB编写的计时器程序不是';不准确?,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,我一直在尝试用VB 2010创建一个计时器程序,精确度为0.05秒(如果可能,为0.01秒) 我在表单中插入一个计时器(Timer1,Interval-50) 计时器滴答作响时的代码: intdsecond = intdsecond + 5 If intdsecond > 99 Then intdsecond = intdsecond - 100 intsecond = intsecond + 1 End If If int

我一直在尝试用VB 2010创建一个计时器程序,精确度为0.05秒(如果可能,为0.01秒)

我在表单中插入一个计时器(Timer1,Interval-50)

计时器滴答作响时的代码:

    intdsecond = intdsecond + 5
    If intdsecond > 99 Then
        intdsecond = intdsecond - 100
        intsecond = intsecond + 1
    End If

    If intsecond > 59 Then
        intsecond = intsecond - 60
        intminute = intminute + 1
    End If
注:intdsecond、intsecond和intminute是用于记录0.01s、1s和1min时间的全局变量

但当我运行计时器1分钟时,记录的时间是48.05秒

如何使计时器更精确?我对代码做了什么错事吗


额外信息:我使用的是windows 7、vb 2010、.Netframework 4客户端配置文件。

您不应该编写计时器逻辑,期望间隔完全精确。有多种因素可以延迟计时器(线程优先级、代码延迟等)。间隔越短,感知到的错误越大(50毫秒相当短)。相反,您应该始终将当前时间与开始时间进行比较(事先存储开始时间并与之进行比较),并将其用于显示目的。

如果这是
System.Windows.Forms.Timer
,则不精确到50毫秒:

Windows窗体计时器组件是单线程的,精度限制为55毫秒。如果需要精度更高的多线程计时器,请使用System.Timers命名空间中的timer类

有关详细信息,请参阅文档上的备注


你也可以考虑一下。间隔时间过去时,它不会引发事件,但如果您关心的只是总经过时间,它确实提供了一些方便的属性(例如,
elapsedmillesons
)。

我知道,但我没想到会出现如此大的错误。差将近12秒。不管怎样,你有什么建议使它更准确(我仍然想使它50毫秒)。提前谢谢。@yihang,我想我确实推荐了一个更准确的解决方案。:)您应该将开始时间存储在一个变量/字段中,并在确定经过的时间时始终与它进行比较
DateTime.Now-startTime
。是的,您这样做了,但我没有把我的问题说得足够清楚。我想在标签上显示经过的时间,并经常刷新。所以,我认为你比较开始时间和结束时间的方法不适合我的情况。如果我不需要显示器,你的方法将非常有用。无论如何,谢谢你的帮助。@yihang,我特别希望你能显示时间。为什么您认为此解决方案不起作用?您的意思是每5毫秒比较一次启动时间和当前时间,并显示经过的时间吗?我以前没想过……这就是我想要的。1min的误差甚至不到0.5s。谢谢你解决了我的问题