C#如何实现高精度定时器,延时1ms
时间: 2024-09-27 10:14:05 浏览: 148
在C#中,要实现高精度定时器并精确到毫秒级别,可以使用`System.Threading.Timer`类配合`Task.Delay`。虽然`Timer`本身是以毫秒为单位,但它并不保证绝对精确,因为实际延迟可能会受到系统调度和其他因素的影响。但是结合`Task`,我们可以创建一个更稳定的机制:
```csharp
using System;
using System.Threading.Tasks;
public class HighPrecisionTimer
{
private readonly Timer _timer;
private Action _callback;
private long _dueTimeMilliseconds;
public HighPrecisionTimer(Action callback, long dueTimeMilliseconds)
{
_callback = callback;
_dueTimeMilliseconds = dueTimeMilliseconds;
_timer = new Timer(OnTimerTick, null, _dueTimeMilliseconds, Timeout.Infinite);
}
private void OnTimerTick(object state)
{
Task.Delay((int)(_dueTimeMilliseconds - Environment.TickCount64)).ContinueWith(_ => _callback());
}
public void Cancel()
{
_timer.Change(Timeout.Infinite, Timeout.Infinite); // 取消任务
}
}
// 使用示例
public async void Main()
{
var timer = new HighPrecisionTimer(() => Console.WriteLine("Callback executed"), 1000); // 延迟1000ms
try
{
await Task.Delay(1500); // 主线程等待一段时间
}
catch (OperationCanceledException) when (timer.Canceled) // 检查是否已取消
{
Console.WriteLine("Timer was canceled.");
}
finally
{
timer.Cancel(); // 确保定时器被取消
}
}
```
这个高精度定时器会在指定的毫秒数过后执行回调函数。注意,由于异步操作的特性,仍然存在一定的不确定性,但如果是在一个相对空闲的环境中,这种不确定性会减小。
阅读全文