HI,
在我的应用程序开发过程中,我使用Thread.Sleep为我们的外部设备提供一些时间来调整设置,然后再进行查询,因为它们很老很慢。
我现在想用更时尚和正确的东西来取代它们。
有没有人有一种简单的方法来“等待”一个设备而不是睡觉,记住设备在准备就绪时不会让我们知道,所以等待就像我们能做的一样好!?? < / p>
问候,乔治。
答案 0 :(得分:7)
沿着使用定时器定期唤醒并查看设备是否准备好的路线可能更合适。
此处至少有两个选项System.Timers.Timer
或System.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(不多),但也许更容易取消(当然,你也可以简单地处理一个线程中断来取消睡眠)。