C#的Timer是典型的好看不好用,虽然Interval的最小值可以写1,但实际精度却只能达到几十毫秒。当我们需要毫秒级的计时器的时候,就只能想别的办法了。网上可以查到很多解决办法,下面只写我用的一种,精度可至1ms.
[DllImport("winmm")]
static extern uint timeGetTime();
[DllImport("winmm")]
static extern void timeBeginPeriod(int t);
[DllImport("winmm")]
static extern uint timeEndPeriod(int t);
private void timer()
{
uint timerstart = timeGetTime();
while (true)
{
uint i = 0;
while (i <N) //N为时间间隔(ms)
{
i = timeGetTime() - timerstart;
}
timerstart = timeGetTime();
timerfunction(); //需要循环运行的函数;
}
}
main()里添加
Thread timerthread = new Thread(timer);
timeBeginPeriod(1);
timerthread.Start();
停止运行代码如下:
timerthread.Abort();
timeEndPeriod(1);
本文介绍了一种在C#中实现毫秒级定时器的方法,通过使用WinMM库中的API函数,能够实现精度高达1毫秒的定时任务。此方案克服了C#内置Timer组件无法达到高精度的问题。
445

被折叠的 条评论
为什么被折叠?



