2017-06-21 70 views
-4

我试图创建一个计时机制,以便我正在运行的控制台应用程序每秒运行大约10帧。当我运行这个代码时,不是每秒平滑20帧,而是经常会出现间断和冻结。我在调试时遇到了麻烦,因为它依赖于DateTime.Now.Millisecond函数,所以每当我在代码中插入一个中断时,它都会使应用程序的时序紊乱。试图使控制台应用程序以每秒20帧的速度运行

do 
{ 
    frameTimer = DateTime.Now.Millisecond; 

    if (firstLoop == true) 
    { 
     timeTillNextFrame = frameTimer + 100; 

     firstLoop = false; 
    } 

    if (timeTillNextFrame < DateTime.Now.Millisecond && DateTime.Now.Millisecond < 901) 
    { 
     Console.Clear(); 

     grid.removeFromGrid(ball.xPos, ball.yPos); 
     ball.newPos(gridSizeX, gridSizeY, grid.gridArray); 
     grid.addToGrid(ball.xPos, ball.yPos, ball.symbol); 

     grid.gridDraw(gridSizeX, gridSizeY); 

     timeTillNextFrame = DateTime.Now.Millisecond + 50; 

     if (timeTillNextFrame >= 1000) 
     { 
      timeTillNextFrame -= 1000; 
     } 

    } 
+0

你可能想'DateTime.Now.TotalMilliseconds'无处不在,对不对?我不确定'901'比较是做什么的。 timeTilNextFrame似乎也是一个误导性的名字。也许它应该是'timeOfNextFrame'? – smarx

+1

你正在看到控制台重新绘制自己。你基本上是在命令提示符下发送垃圾邮件。 – Alex

+0

为什么不使用计时器?此外,griddraw需要执行多长时间,你需要考虑到这一点... – Trey

回答

0

你不想DateTime.Now.Millisecond,你想要的总毫秒:

private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

var totalMilliseconds = DateTime.Now.ToUniversalTime().Subtract(Epoch).TotalMilliseconds 
+0

我找不到需要实现的命名空间,任何提示? –

+0

我得到错误表示没有'TotalMilliseconds'的扩展方法? –

+0

对不起,混合了TimeSpan和DateTime。编辑答案。 – nvoigt

相关问题