繁体   English   中英

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

[英]Issue regarding Thread.Sleep() for 2hours in c#

我正在.net Windows应用程序上工作。

我正在使用System.Threading.Thread.

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

为此,我正在使用

Thread.Sleep(10800000)

3小时

但是我在执行以下命令后检查了调试模式

Thread.Sleep(10800000)

我的调试未进入下一行,或者即使等待了4个小时,下一行也从未执行。

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

这就是为什么我用这个

Thread.Delay(10800000)

意味着我的后续代码仅在等待3个小时后才能继续执行。

谁能帮我?

Thread.Sleep不适用于长时间睡眠。 您应该考虑使用诸如System.Threading.Timer之类的东西

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

您可以给它一个午夜的首次运行时间,并使其每24小时关闭一次。 Timer(TimerCallback,Object,TimeSpan,TimeSpan)构造函数正是您要寻找的。

有人会说,即使使用计时器也不是完成这项工作的最佳工具。 您可能要考虑使用Windows Task Scheduler (TS)。 使用TS,您可以设置时间表以说运行您的应用并执行工作流程,或者如果您的程序必须一直运行,则触发另一个以某种方式与您的应用进行通信的进程。

如果该过程在下一个间隔之前什么也不做,那么最好只是终止该应用程序 这样,您就不会浪费线程或进程在等待下一个间隔执行某项操作之前,将它们的拇指摆在过度的延迟上。

您可以使用c#中的Microsoft Task Scheduler v2 COM库来设置计划,也可以从TS UI本身手动进行。

我建议使用计时器而不是Thread.Sleep或Delay。 代替Thread.Sleep,根据您的需要启动一个3或4个小时超时的计时器,然后该计时器将发送所需的命令。

System.Threading.Timer可能会做

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM