如何在同一时间每天一次在c#服务中执行代码?

所以这就是我的问题,我需要在每天凌晨3点在ftp上获取文件的服务器上运行ac#service。 我认为我可以使用thread.sleep()或者将DateTime.Now与凌晨3点进行比较….

你有更好的解决方案吗?

非常感谢您的帮助!

更好的解决方案,让Windows使用计划任务为您完成。

如果它只需要每天执行一次,那么我会为此而努力。 即使谷歌也这样做;)

编辑:

要回答评论,就像弗雷德里克所说的那样。 它是一个高级选项,您可以在设置任务时打开它,其中包含一个名为“ Run only if logged on ”的复选框,开头时为false。

编写一个控制台应用程序或同等程序,并使用Windows Scheduler(或现在称之为的任何东西……)每天运行它。

对于灵活的解决方案,您可以使用它 。 它不是Windows服务,但您可以轻松地将其合并为一个。 或者您可能会认为Quartz.NET被认为是工业实力(Java版本肯定是)。

我已成功使用计划任务进行备份,但我有一个谨慎的话……

如果您注销,则不会执行计划任务。 我不确定这是否可以被覆盖,但我已经被未执行的任务所困扰,因为Windows会自动更新,重新启动并等待我登录。

我禁用了自动更新 – Windows首先要求ASK。

另一个考虑因素是3AM是许多用户通常会被注销的时间。

其他答案都很好。 我只是想我会指出这一点

将DateTime.Now与凌晨3点进行比较

即使你在每次检查之间睡了一段时间也是一个糟糕的解决方案,因为它不必要地浪费系统资源(不仅在重复检查时间,而且还在程序的内存使用中)。

如果你每天晚上都在期待一个文件,而不是担心它什么时候到来,那么只要事件被触发就可以了。

看着:

System.IO.FileSystemWatcher

MSDN上的文件系统观察程序

为什么不将其设置为作为计划任务运行。 让它执行然后退出。 设置Windows以在每天凌晨3:00将计划任务作为计划任务启动。

System.Threading.Timer可能会为您解决问题。

记录在这里