C#Windows服务间歇方法调用 脚本

C#Windows服务间歇方法调用 脚本,c#,windows-services,timer,C#,Windows Services,Timer,我有一个C#Windows服务,基本上订阅一些事件,如果事件触发了什么,它会执行一些任务 事情。。。 …这些事件是监控过程,我需要在一天中的某些时间重新启动 问题: 在准确的时间执行此任务的最佳方式是什么 目前的想法是: 1) 使用计时器每隔几分钟检查一次时间。 2) 它不是计时器,也不是一个糟糕的实现 非常感谢您的帮助。您可以设置在一天中特定时间运行的计时器,但我可能会赞成以下方法 while (!closing) { if (SomethingNeedsDoingNow()) { DoIt(

我有一个C#Windows服务,基本上订阅一些事件,如果事件触发了什么,它会执行一些任务

事情。。。 …这些事件是监控过程,我需要在一天中的某些时间重新启动

问题: 在准确的时间执行此任务的最佳方式是什么

目前的想法是: 1) 使用计时器每隔几分钟检查一次时间。 2) 它不是计时器,也不是一个糟糕的实现


非常感谢您的帮助。

您可以设置在一天中特定时间运行的计时器,但我可能会赞成以下方法

while (!closing)
{
if (SomethingNeedsDoingNow()) { DoIt(); }

Thread.Sleep(1);
}
这几乎不会消耗任何资源,然后可以在一天中的任何时间轻松地将事件触发到1秒的粒度


注意
somethingsneedsDoInNow
应检查当前时间,并查看是否有任何事件需要触发。如果您可以使用更宽松的粒度,那么您可以改为睡眠60秒。

如果您真的想避免实施计时器,一个选项是windows计划的任务,该任务在启动时会终止已处理的任务

然后,您可以让您的服务不断轮询,以确保进程正在运行,如果没有,则启动它们


仍然是一种“timer-y”,但这是另一种方法。

使用IsBackground=true在服务启动时启动一个新线程。这确保了服务停止时线程死亡,因此您可以简单地启动并忘记它

while (!closing)
{
if (SomethingNeedsDoingNow()) { DoIt(); }

Thread.Sleep(1);
}
在线程中,使用thread.Sleep(60*1000)的无休止循环,等待一天中正确的时间重新启动。重新启动可能应该在IsBackground=false的新线程上完成,以防止在应用程序重新启动完成之前停止服务(Windows允许关闭服务的时间限制为30秒左右)。或者,您可以为重启操作生成一个单独的进程