所以这是我的问题,我需要在服务器上运行一个c#服务,该服务器每天凌晨3点在ftp上获取文件一次。我认为我可以使用thread.sleep()或者将DateTime.Now与凌晨3点进行比较....
你有更好的解决方案吗?
非常感谢你的帮助!
答案 0 :(得分:36)
更好的解决方案,让Windows使用Scheduled Tasks为您完成。
如果它只需要每天执行一次,那么我会为此而努力。即使谷歌也这样做;)
编辑:
要回答评论,就像Fredrik所说的那样。它是一个高级选项,您可以在设置任务时打开它,其中包含一个名为“Run only if logged on
”的复选框,开头时为false。
答案 1 :(得分:4)
编写一个控制台应用程序或同等程序,并使用Windows Scheduler(或现在称之为的任何东西......)每天运行它。
答案 2 :(得分:3)
对于灵活的解决方案,您可以使用this。它不是Windows服务,但您可以轻松地将其合并为一个。或者您可能会认为Quartz.NET被认为是工业实力(Java版本肯定是)。
答案 3 :(得分:3)
我已成功使用预定任务进行备份,但我有一点需要注意......
如果您注销,则不会执行计划任务。我不确定这是否可以被覆盖,但我已经被未执行的任务所困扰,因为Windows会自动更新,重新启动并等待我登录。
我禁用了自动更新 - Windows首先应该是ASK。
另一个考虑因素是3AM是许多用户通常会被注销的时间。
答案 4 :(得分:2)
其他答案都很好。我只是想我会指出
将DateTime.Now与凌晨3点进行比较
是一个糟糕的解决方案,即使你在每次检查之间睡了一段时间,因为它不必要地浪费系统资源(不仅在重复检查时间,而且还在程序的内存使用中)。
答案 5 :(得分:2)
如果你每天晚上都在期待一个文件,而不是担心它什么时候到来,那么只要事件发生就会被触发。
看看:
System.IO.FileSystemWatcher
答案 6 :(得分:1)
System.Threading.Timer
可能适合您。
答案 7 :(得分:1)
为什么不将其设置为作为计划任务运行。让它执行然后退出。设置Windows以在每天凌晨3:00将计划任务作为计划任务启动。