C# - 在控制台应用程序中精确使用Thread.Sleep

时间:2017-10-19 19:15:40

标签: c# multithreading sleep thread-sleep

我是一名学习c#的初学程序员,我想在控制台窗口中制作基于文本的蛇游戏。现在,游戏工作得相当好,但我遇到一个问题,使用Thread.Sleep()方法暂停代码一段特定的毫秒。

问题在于,每当我尝试暂停游戏特定时间时,它似乎会暂停几毫秒。而且由于这是一场蛇游戏,这是一个非常大的问题。

我试图做的事情:

while (true)
            {
                double startingTime = DateTime.Now.TimeOfDay.Milliseconds;
                //code
                double lag = DateTime.Now.TimeOfDay.Milliseconds - startingTime;
                Thread.Sleep((int)Math.Round(25 - lag));
                double finalTime = DateTime.Now.TimeOfDay.Milliseconds - startingTime;
                Console.Title = string.Format("Time: {0}", finalTime);
            }

我知道这个代码需要大约6毫秒才能运行,所以我试着测量它并从它应该在每次移动之间等待的时间中减去它。有时候它可以正常工作,但通常情况下,控制台标题说需要31毫秒......

我真的很感激任何建议,如果你知道一个更好的方法来暂停代码运行一段时间,我会很高兴知道:)

解决:我最终使用秒表,如Tamir Suggested,感谢所有帮助过的人:D

1 个答案:

答案 0 :(得分:4)

嗯,对于非常精确的计时,你应该使用multimedia计时器。 下一个最佳选择是秒表