如何使用DateTime类测量经过的时间?

Mar*_*tin 6 c# time

我在这里遇到一种奇怪的行为.控制永远不会来自do-while循环.在调试时,我发现变量间隔的值在某些循环期间减少,而不是增加!我在这里遗漏了一些明显的东西,但无法弄明白.

static void Main(string[] args)
{
    int interval = 0;
    DateTime startTime = DateTime.Now;

    //Task1(); //Task1 can take 4-8 seconds to complete

    do
    {
        Thread.Sleep(100);
        interval = (DateTime.Now - startTime).Milliseconds;
    } while (interval < 10000); //wait for at-least ten seconds from program start, before executing task2

    //Task2();
}
Run Code Online (Sandbox Code Playgroud)

Fab*_*bio 12

不要DateTime用于测量时间间隔.

使用Stopwatch专为此目的而设计的类

var clock = new Stopwatch();
clock.Start();
do
{
    // do something
}
while (clock.ElapsedMilliseconds < 10000)
clock.Stop();
Run Code Online (Sandbox Code Playgroud)

注意:当然你可以DateTime用来测量时间,但是如果你需要精度小于秒,那么Stopwatch就是工作的正确工具.
并且Stopwatch具有更易读且易于使用的方法来测量时间

在您的特定情况下:"在执行task2之前等待程序启动至少十秒钟"您可以使用异步方法

var task1 = StartTask1();

await Task.Delay(10000); // next line will be executed approximately after 10 s

var task2 = StartTask2();
Run Code Online (Sandbox Code Playgroud)


Sef*_*efe 9

你的问题是你衡量毫秒部分TimeSpan.你必须使用TotalMilliseconds而不是Milliseconds:

do
{
    Thread.Sleep(100);
    interval = (DateTime.Now - startTime).TotalMilliseconds;
} while (interval < 10000); //wait for at-least ten seconds from program start, before executing task2
Run Code Online (Sandbox Code Playgroud)