关于Thread.Sleep()在c#中2小时的问题

时间:2017-03-09 09:04:55

标签: c# .net visual-studio-2012 sleep

我正在开发.net windows应用程序。

我正在使用System.Threading.Thread.

使用五(5)个线程的单一形式。我有一个代码,在运行时,它按顺序执行一系列行。我想在两者之间添加暂停。

因为我正在使用

Thread.Sleep(10800000)

3小时

但是在执行

行之后我检查了调试模式
Thread.Sleep(10800000)

我的调试不会进入下一行,或者即使在等待4个小时后,下一行也不会执行。

我在不在主线程中的其他线程中使用此Thread.Delay。 此延迟要求因为,我发送命令将设置配置为硬件,该设置需要最少 3小时才能完成。

这就是我使用这个

的原因
Thread.Delay(10800000)

表示我的前进代码仅在等待3个小时后才会继续。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

Thread.Sleep不适用于长时间睡眠。你应该考虑使用像System.Threading.Timer这样的东西。

  

提供以指定的时间间隔在线程池线程上执行方法的机制。

你可以给它一个午夜的第一次运行时间,让它每24小时运行一次。 Timer(TimerCallback,Object,TimeSpan,TimeSpan)构造函数正是您所需要的。

答案 1 :(得分:1)

有人会说,即使使用计时器也不是最好的工具。您可能需要考虑使用 Windows任务计划程序(TS)。使用TS,您可以设置一个计划来说明运行您的应用程序并执行工作流程,或者如果您的程序必须一直运行,则触发另一个与您的应用程序通信的进程。

如果进程 没有做任何事情直到下一个时间间隔,那么最好只是杀死应用。通过这种方式,你不会浪费线程或进程在等待下一个间隔做某事的过度延迟上喋喋不休。

您可以使用c#中的 Microsoft Task Scheduler v2 COM Library 来设置日程安排,也可以从TS UI本身手动设置。

答案 2 :(得分:0)

我建议使用计时器而不是Thread.Sleep或Delay。代替Thread.Sleep启动一个超时为3或4小时的计时器,具体取决于您的需要,然后发送所需的命令。

System.Threading.Timer可能会完成这项工作