Thread.Sleep - 如何以正确的方式使用它?

时间:2014-04-06 23:14:26

标签: c# .net

System.Threading.thread.Sleep(1000);暂停一整个程序1秒钟,但是当第二个结束时它会完成所有可以在这段时间内完成的事情。例如:

Thread.Sleep(1000);
Console.WriteLine("A");
Thread.Sleep(1000);
Console.Writeline("B");

它将等待两秒钟并写入

  

一个
  乙

如何正确使用暂停?

2 个答案:

答案 0 :(得分:4)

如果您希望每秒发生一次,那么创建一个计时器。例如:

private System.Threading.Timer _timer;

void main()
{
    _timer = new Timer(TimerTick, null, 1000, 1000);
    // do other stuff in your main thread
}

void TimerTick(object state)
{
    // do stuff here
}

有几种不同类型的计时器。如果您正在编写控制台程序,那么我建议使用System.Threading.Timer。在Windows窗体应用程序中,System.Windows.Forms.TimerSystem.Timers.Timer。有关详细信息,请参阅Timers

答案 1 :(得分:1)

Thread.Sleep()表现得像你想象的那样;它只是暂停当前线程大约给定的毫秒数。

这里的问题是标准输出流不一定在每次调用Write时都会刷新到控制台(或指向它的任何地方)。相反,它可以缓冲一些内容,以便以更大的块来写出来以提高效率。尝试拨打Console.Out.Flush();在每个WriteLine()之后,你应该看到你期望的结果。