我有一个C#Windows服务,基本上订阅了一些事件,如果事件触发任何事情,它会执行一些任务。
....这些事件是监控进程,我需要在一天中的某些时间重启。
在准确的时间执行此任务的最佳方式是什么?
1)使用计时器检查每隔几分钟的时间。 2)不是计时器而且不作为实现的东西。
非常感谢。
答案 0 :(得分:0)
你可以设置在一天的特定时间运行的计时器,但我可能会赞成以下方法。
while (!closing)
{
if (SomethingNeedsDoingNow()) { DoIt(); }
Thread.Sleep(1);
}
这几乎不会消耗任何资源,然后可以轻松地在一天中的任何时间将事件发送到1秒的粒度。
注意SomethingNeedsDoingNow
应检查当前时间,并查看是否需要触发任何事件。如果你可以通过更宽松的粒度逃脱,那么你可以睡60秒。
答案 1 :(得分:0)
如果你真的想避免实现一个计时器,那么一个选项是一个Windows计划任务,它会在你被处理的时候终止它。
然后,您可以让您的服务不断轮询以确保进程正在运行,如果没有启动它们。
仍然允许“计时器-Y”,但这是另一种方法。
答案 2 :(得分:0)
在服务启动时使用IsBackground = true启动新线程。这可以确保您的服务停止时您的线程死亡,因此您可以简单地开始并忘记它。
在线程中,使用Thread.Sleep(60 * 1000)的无限循环,等待正确的时间进行重启。重启应该可以在IsBackground = false的新线程上完成,以防止您的应用在应用程序完成重新启动之前停止服务(限制为Windows允许服务关闭30秒左右)。或者,您可以为重新启动操作生成单独的进程。