所以這裏是我的問題,我需要做一個服務器上運行的服務器上每天凌晨3點在ftp上獲取文件。我認爲我可以用thread.sleep()或通過比較DateTime.Now與3am來實現....如何在同一時間每天一次在c#服務中執行代碼?
你有更好的解決方案嗎?
非常感謝您的幫助!
所以這裏是我的問題,我需要做一個服務器上運行的服務器上每天凌晨3點在ftp上獲取文件。我認爲我可以用thread.sleep()或通過比較DateTime.Now與3am來實現....如何在同一時間每天一次在c#服務中執行代碼?
你有更好的解決方案嗎?
非常感謝您的幫助!
更好的解決方案,讓Windows爲您使用Scheduled Tasks。
如果它只需要每天執行一次,那麼我會去做這件事。即使谷歌做它;)
編輯:
要回答的評論,它是作爲Fredrik說。它是一個高級選項,您可以在任務設置時打開該選項,其中包含一個名爲「Run only if logged on
」的複選框,該複選框在開始時爲false。
編寫一個控制檯應用程序或相當的程序,並使用Windows調度程序(或現在稱之爲...)來每天運行它。
System.Threading.Timer
可能適合你。
爲什麼不設置此爲計劃任務運行。讓它執行然後退出。設置Windows以便在每天凌晨3點作爲計劃任務啓動進程。
如需靈活的解決方案,您可以使用this。這不是Windows服務,但可以輕鬆將其合併到一個。或者你可以考慮Quartz.NET這被認爲是工業實力(Java版本當然是)。
+1的Quartz.NET參考 - 這將是解決自定義解決方案中調度需求的正確和強大的確實選擇(也應該首選的手放在你提到的有限的自定義cron上,使用Quartz非常容易),但是對於手頭上使用Task Scheduler的任務,按照接受的答案來看,肯定是一種可行的方法。 – 2009-09-11 14:03:05
其他答案都很好。我想我要指出的是,
比較DateTime.Now與凌晨3點
是一個壞的解決方案,即使你的睡眠對每個檢查之間的一段時間,因爲它浪費了系統資源的不必要的(不僅在反覆檢查時間,而且在程序的內存使用情況中)。
我的計劃任務順利進行備份,但我有一個忠告......
計劃任務,如果你註銷不執行。我不確定這是否可以過度使用,但是由於Windows自動更新,重新啓動並且坐等待我登錄,因此我沒有被執行任務。
我禁用了自動更新 - Windows應該首先詢問。
另一個考慮因素是3AM是許多用戶通常會註銷的時間。
這就是我在想什麼......我已經嘗試了計劃任務,並且在服務器重啓後沒有任何開始......謝謝! – Bigballs 2009-09-03 13:49:23
我必須說,我從來沒有自己的問題。總是爲我工作100%。 – 2009-09-03 13:52:32
如果您每晚都在等待一個文件,而不是擔心它到達的時間,那麼只需在事件發生時觸發一個事件即可。
看:
System.IO.FileSystemWatcher
+1好的一堂,謝謝:) – 2010-02-17 07:53:35
我推薦!對於我的公司來說,目前這是最好的解決方案。 – Zanoni 2009-09-03 13:11:29
這絕對是要走的路;那麼你的應用程序將不會使用任何內存,而只是在等待明天運行。 – 2009-09-03 13:11:57
將C#服務更改爲Windows應用程序no forms。 – Zanoni 2009-09-03 13:12:39