我经常看到人们提到不应该使用Thread.Sleep();
,但我不明白为什么。如果Thread.Sleep();
可能会引起问题,是否有任何可以安全地达到相同效果的替代方案?
例如:
while(true)
{
doSomework();
i++;
Thread.Sleep(5000);
}
另一个是:
while (true)
{
string[] images = Directory.GetFiles(@"C:\Dir", "*.png");
foreach (string image in images)
{
this.Invoke(() => this.Enabled = true);
pictureBox1.Image = new Bitmap(image);
Thread.Sleep(1000);
}
}
Thread.Sleep
和goto
并不完全相同,goto
更像是一种代码异味而不是设计异味。编译器在你的代码中插入goto
并没有错,计算机不会困惑。但是Thread.Sleep
不完全相同;编译器不会插入这个调用,并且它还有其他负面影响。但是,使用它是错误的这一总体观点几乎始终是正确的,因为几乎总有更好的解决方案。” - Cody Gray