【发布时间】:2012-02-07 14:37:52
【问题描述】:
我经常看到它提到不应该使用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:,即对于您的问题可能有比Sleep更好的解决方案。 -
和
goto不完全一样,更像是代码味道而不是设计味道。编译器将gotos 插入您的代码没有任何问题:计算机不会混淆。但是Thread.Sleep并不完全相同。编译器不会插入该调用,它还会产生其他负面后果。但是,是的,使用它是错误的,因为几乎总是有更好的解决方案,这种普遍看法当然是正确的。 -
@KevinKostlan 使用计时器或调度框架(如quartz.net)然后...
-
每个人都在就上述示例为什么不好提供意见,但没有人提供不使用 Thread.Sleep() 的重写版本,它仍然可以实现给定示例的目标。
标签: c# multithreading sleep