寻找一个简单的替代方法来替代Thread.Sleep。

7

你好,

在开发我的应用程序期间,我使用Thread.Sleep来给我们的外部设备一些时间来调整设置,因为它们非常老旧且缓慢。

现在我想用更加优雅和正确的方式来替换这些方法。

有没有简单的方法可以“等待”设备而不是睡眠,考虑到设备不会告诉我们何时准备好,所以等待是我们能做的最好的事情!?

谢谢,George。

4个回答

7

使用定时器定期唤醒并检查设备是否准备好可能更合适。

你至少有两个选择:System.Timers.TimerSystem.Threading.Timer

然而,这可能意味着您需要更多地涉足多线程编程,以便定时器可以在设备就绪时通知程序的其余部分继续执行(例如使用WaitHandle或某种类型的对象,如AutoResetEvent)。

在我看来,使用Thread.Sleep来阻塞单个同步线程本身并没有什么 intrinsically 错误。


如果你向设备请求信息,它只会简单地给出一个ER错误消息,所以我发现等待是最好的选择。整个应用程序必须等待该设备响应,因此如果Sleep()不是一种不良实践,那么我很乐意在单线程中继续使用它。感谢大家提供的信息,非常感谢。 - George
我也倾向于保持原样。如果你开始使用单独的计时器,那么就需要向程序的其余部分发出信号,表明设备现在已经准备好了,这会增加复杂性。 - Rob Levine

3

1

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

当然,您可能会面临实际问题,需要选择任意时间范围等待设备更新。

您的应用程序是否没有办法尝试继续操作并在因设备状态而失败时重试?(当然,需要设置最大重试次数)


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接