你好,
在开发我的应用程序期间,我使用Thread.Sleep来给我们的外部设备一些时间来调整设置,因为它们非常老旧且缓慢。
现在我想用更加优雅和正确的方式来替换这些方法。
有没有简单的方法可以“等待”设备而不是睡眠,考虑到设备不会告诉我们何时准备好,所以等待是我们能做的最好的事情!?
谢谢,George。
使用定时器定期唤醒并检查设备是否准备好可能更合适。
你至少有两个选择:System.Timers.Timer
或System.Threading.Timer
。
然而,这可能意味着您需要更多地涉足多线程编程,以便定时器可以在设备就绪时通知程序的其余部分继续执行(例如使用WaitHandle
或某种类型的对象,如AutoResetEvent
)。
在我看来,使用Thread.Sleep
来阻塞单个同步线程本身并没有什么 intrinsically 错误。
在大多数情况下,我更喜欢使用Monitor.Wait而不是Thread.Sleep,因为与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
让应用程序等待的最佳方法是使用Thread.Sleep()
当然,您可能会面临实际问题,需要选择任意时间范围等待设备更新。
您的应用程序是否没有办法尝试继续操作并在因设备状态而失败时重试?(当然,需要设置最大重试次数)