Thread.Sleep()的替代方案,用于模拟暂停

Gur*_*epS 20 c#

所以Thread.Sleep()很糟糕(http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx).

是否有任何建议的替代方法来模拟程序执行中的暂停?比如一个循环?虽然我认为这在初始化变量,检查bool条件等方面涉及很多开销.

谢谢

Fre*_*örk 12

如果你只想模拟暂停(就像测试目的一样),我认为Thread.Sleep是一种非常有效的方法.另一方面,如果你实际上在等待什么,某种线程安全的信令机制会更好(检查继承的类型WaitHandle).


Jas*_*aty 6

模拟暂停

"模拟"听起来像是你在调试时才会做的事情.Thread.Sleep应该没事.

睡眠的主要问题是通常你应该等待特定的事情发生而不是等待任意延迟.

需要注意的另一件事是Thread.Sleep从UI线程调用,这将使UI无响应.最好禁用不希望用户与之交互的UI部分,然后使用Timer控件来实现延迟.


Bla*_*erX 0

我相信 Raymond Chen 建议将线程优先级设置得较低

http://blogs.msdn.com/oldnewthing/archive/2009/07/27/9849503.aspx

我不太明白你为什么要经常暂停。为什么不只做低优先级的工作呢?当有更重要的事情要做时,你的后台线程将停止做它正在做的事情。当有可用的 CPU 时,您的后台线程将尽可能快地完成任务(直到具有更高优先级的任务到达)。