寻找Thread.Sleep的简单替代方案

时间:2010-05-17 08:58:35

标签: c# sleep

HI,

在我的应用程序开发过程中,我使用Thread.Sleep为我们的外部设备提供一些时间来调整设置,然后再进行查询,因为它们很老很慢。

我现在想用更时尚和正确的东西来取代它们。

有没有人有一种简单的方法来“等待”一个设备而不是睡觉,记住设备在准备就绪时不会让我们知道,所以等待就像我们能做的一样好!?? < / p>

问候,乔治。

4 个答案:

答案 0 :(得分:7)

沿着使用定时器定期唤醒并查看设备是否准备好的路线可能更合适。

此处至少有两个选项System.Timers.TimerSystem.Threading.Timer

然而,这可能意味着您必须更多地参与多线程,以便计时器可以在设备准备就绪时通知程序的其余部分(例如使用WaitHandle或某种类型,例如AutoResetEvent)。

使用Thread.Sleep阻止单个同步线程IMHO没有任何本质上的错误。

答案 1 :(得分:3)

在大多数情况下,我更喜欢在Thread.Sleep上使用Monitor.Wait,因为与Thread.Sleep不同,如果需要,可以使用Monitor.Pulse解锁。为了更好地解释为什么应该明智地使用Thread.Sleep,请参阅http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx

答案 2 :(得分:1)

使应用程序等待的最佳方法是使用Thread.Sleep()

当然,你有一个真正的问题,你需要选择一个arbituary时间表来等待设备更新。

如果由于设备的状态导致应用程序失败,您的应用程序是否无法继续尝试进行重试? (当然需要最多的重试次数)

答案 3 :(得分:1)

只要您从后台线程进行调用,这可能不是一种可怕的方法。您可能也会使用计时器在一段时间后回拨;更多ecomplex(不多),但也许更容易取消(当然,你也可以简单地处理一个线程中断来取消睡眠)。