C# 实时同步定时器
我正在尝试使用C# 实时同步定时器,c#,winforms,timer,C#,Winforms,Timer,我正在尝试使用计时器每隔17ms刷新帧 Timer timer = new Timer(17); timer.Elapsed += ResetFrame; timer.Start(); 但它不是等待17ms然后重复,而是等待帧刷新完成,然后等待17ms进行下一次重复。这会导致帧每隔28毫秒刷新一次。如何将其与实时同步?要使实时计时器具有很短的间隔,您可以阅读本文: 在.Net中,下列计时器不是实时的 System.Windows.Forms.Timer System.Timers.Timer
计时器每隔17ms
刷新帧
Timer timer = new Timer(17);
timer.Elapsed += ResetFrame;
timer.Start();
但它不是等待17ms
然后重复,而是等待帧刷新完成,然后等待17ms
进行下一次重复。这会导致帧每隔28毫秒刷新一次。如何将其与实时同步?要使实时计时器具有很短的间隔,您可以阅读本文:
在.Net中,下列计时器不是实时的
System.Windows.Forms.Timer
System.Timers.Timer
System.Threading.Timer
意味着如果你想每100毫秒运行一次你的代码
计时器甚至可以在110毫秒或更晚的时间触发。Windows不是一个真正的应用程序
由于这个原因,时间操作系统.Net也不是实时的
要在C#中创建实时计时器,您必须编写自定义代码
可以控制CPU在正确的时间运行代码
类程序
{
静态void Main(字符串[]参数)
{
Console.ReadLine();
控制台。写入线(“运行”);
RealTimeTimerTest obj=新的RealTimeTimerTest();
obj.Run();
}
}
公共类实时测试
{
List lst=新列表();
System.Diagnostics.Stopwatch sw=新的System.Diagnostics.Stopwatch();
公开募捐
{
int Tick=100;
int Sleep=Tick-20;
长OldElapsedMilliseconds=0;
sw.Start();
同时(软件正在运行)
{
长elapsedmillesons=sw.elapsedmillesons;
长模式=(ElapsedMilliseconds%Tick);
如果(OldElapsedMilliseconds!=ElapsedMilliseconds&&(mod==0 | | ElapsedMilliseconds>勾选))
{
//-----------------在这里做你想做的事------------开始
lst.Add(DateTime.Now);
//-----------------在这里做你想做的事------------结束
//-----------------重新启动------------------启动
OldElapsedMilliseconds=ElapsedMilliseconds;
OldElapsedMilliseconds=0;
sw.Reset();
sw.Start();
系统。线程。线程。睡眠(睡眠);
//-----------------重新启动------------------结束
}
//------------必须在这里定义一些条件来中断循环------开始
如果(第一次计数>500)
{
Write();
打破
}
//-------------必须在这里定义一些条件来中断循环-----------结束
}
}
私有无效写入()
{
System.IO.StreamWriter sw=新的System.IO.StreamWriter(“d:\\text.txt”,true);
foreach(在lst中的日期时间dtStart)
sw.WriteLine(dtStart.ToString(“HH:mm:ss.ffffff”);sw.Close();
}
}
还认为:
您的UI线程正忙于执行处理程序(刷新我假设的帧)。它将如何继续执行您的处理程序,并同时开始再次执行它?您可以有一个,但我怀疑结果是否会是您期望的。@aepot@OlivierRogier我使用的是System.Timers
;发现:&&&@OlivierRogier的代码解决了我的问题。非常感谢。