thread.sleep 正在弄乱秒表

thread.sleep is messing with stopwatch

我正在使用秒表来了解积分(游戏)系统的某些操作 运行 需要多长时间。

我是这样定义的:

Stopwatch sekunde = new Stopwatch();
long tocke;
long glavnetocke;
long cas;

tocke 和 glavnetocke 是点。

然后在"construct"我需要这样做:

 sekunde.Start();
 Thread.Sleep(10000);
 sekunde.Stop();

如果我不让线程休眠 10000 次,它将无法工作。

稍后在事件处理程序中我这样使用它:

        sekunde.Start();
        viewer.Clear();
        viewer.DrawBody(body, 10.0, Brushes.Green, 10.0, Brushes.Green);
        sekunde.Stop();
        cas = (long)sekunde.Elapsed.TotalSeconds;
        tocke = tocke + ((cas / 10));
        if (tocke > 200)
        {
             glavnetocke = glavnetocke + 1;
             tocke = 0;
        }

viewer 是画 body 站在镜头前的人。 如果我将 thread.sleep 保留为 10000 它将起作用,否则它将不起作用。但我需要它消失,因为它会停止整个程序。即使只有在我按下表单中的按钮后它才会发生,我需要等待 10 秒才能开始。正在考虑只添加加载屏幕,但它不起作用,因为它冻结了整个程序,所以它不显示加载 gif。

编辑:

好吧,正如你所见,“tocke = tocke +((cas / 10)); 如果我删除 thread.sleep 或什至降低睡眠次数,tocke 始终为 0。秒表需要时间来初始化吗? 我想知道对 long 类型变量的操作 运行s 的时间,这样我就可以用它来计算游戏积分。 (cas = (long)sekunde.Elapsed.TotalSeconds;)

通过将 TotalSeconds 转换为 long,您将砍掉小数部分。我已经使用 doubles 重做了你的例子,它似乎对我有用:

Stopwatch sekunde = new Stopwatch();
long glavnetocke = 0;
double cas;
double tocke = 0;

sekunde.Start();
sekunde.Stop();

cas = sekunde.Elapsed.TotalSeconds;
tocke = tocke + ((cas / 10));
if (tocke > 200)
{
    glavnetocke = glavnetocke + 1;
    tocke = 0;
}

结果

cas = 0.0000015(在我的设置中)