C# 寻找一个简单的替代线程。睡眠

C# 寻找一个简单的替代线程。睡眠,c#,sleep,C#,Sleep,嗨 在我的应用程序开发过程中,我使用Thread.Sleep让我们的外部设备在进行查询之前有一些时间来调整设置,因为它们非常旧而且速度很慢 我现在想用更时尚、更正确的东西来取代这些 有没有人有一个简单的方法来“等待”设备而不是睡觉,记住设备不会让我们知道它什么时候准备好了,所以等待差不多就是我们能做的了 你好,乔治。让应用程序等待的最好方法是使用Thread.Sleep() 当然,您有一个真正的问题,您需要选择一个任意的时间刻度来等待设备更新 如果由于设备状态导致应用程序失败,应用程序是否无法尝

在我的应用程序开发过程中,我使用Thread.Sleep让我们的外部设备在进行查询之前有一些时间来调整设置,因为它们非常旧而且速度很慢

我现在想用更时尚、更正确的东西来取代这些

有没有人有一个简单的方法来“等待”设备而不是睡觉,记住设备不会让我们知道它什么时候准备好了,所以等待差不多就是我们能做的了


你好,乔治。

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

当然,您有一个真正的问题,您需要选择一个任意的时间刻度来等待设备更新


如果由于设备状态导致应用程序失败,应用程序是否无法尝试继续并重试?(当然,需要有一个最大重试次数)

最好使用计时器定期唤醒设备,看看设备是否准备就绪

这里至少有两个选项
System.Timers.Timer
System.Threading.Timer

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


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

只要您是从后台线程进行调用,这可能不是一种糟糕的方法。您还可以使用计时器在间隔后回拨;更复杂(不多),但可能更容易取消(当然,您也可以简单地处理线程中断以取消睡眠)。

我更喜欢使用Monitor.Wait over thread.sleep,因为与thread.sleep不同,它可以使用Monitor.Pulse解除阻塞(如果需要)。要很好地解释为什么要明智地使用Thread.Sleep,请参见

如果你向设备询问信息,它只会给你一条ER错误消息,因此我发现等待是最好的选择。整个ap必须等待这个设备响应,所以如果Sleep()不是一个坏习惯,那么我很乐意继续在单线程中使用它。谢谢大家提供的信息,非常感谢。我可能也倾向于保持原样。通过使用单独的计时器,您开始增加复杂性,然后这些计时器必须向程序的其余部分发出信号,表明设备已准备就绪。