C#计时器以完整的秒数开始

Nor*_*gul 1 c# timer

有没有办法运行Timer它,以便它完全开始?

stateTimer = new Timer(someCallback, null, 0, 1000);
Run Code Online (Sandbox Code Playgroud)

这个将立即开始,重复每一秒,但问题是它将在我运行可能导致13:14:15.230启动的程序时正好启动.

我想13:14:15.000开始.就像是:

stateTimer = new Timer(someCallback, null, DateTime.Now.Date, 1000);
Run Code Online (Sandbox Code Playgroud)

那可能吗?

编辑:

执行控制台日志后:

Console.WriteLine($"Time: {DateTime.Now.ToString("HH:mm:ss.fff")}");
Run Code Online (Sandbox Code Playgroud)

我注意到1秒间隔实际上增加了一秒以上(每次迭代约1,02次),因此在50次迭代后会跳过一秒.我已经解决了我的问题,让计时器每800毫秒运行一次.不理想的解决方案,但它的工作原理,第二个永远不会被跳过(我在触发相同的秒两次没有问题).

stateTimer = new Timer(someCallback, null, 0, 800);
Run Code Online (Sandbox Code Playgroud)

Pat*_*man 6

不,这是不可能的.这将要求您确切知道CPU何时认为开始执行您的计时器代码是个好主意.即使你想要Thread.Sleep剩下的时间,它仍然不意味着代码是在你想要的毫秒级执行的.

相反,如果您只想对格式化执行此操作,则可以使用自定义日期/时间格式来执行此操作.