2012-02-28 39 views
2

我想在大多數時間在後臺運行的C#中編寫應用程序。它應該只顯示一個TrayIcon。爲此我找到了一個教程:http://www.simple-talk.com/dotnet/.net-framework/creating-tray-applications-in-.net-a-practical-guide/編寫一個在後臺運行的程序,並且每小時執行一次動作

但是我怎麼能告訴我的程序每小時運行一次?什麼是實現這個最好的方法。計時器?應用程序應儘可能少地使用資源,而無所事事。

謝謝

+0

[如何自動運行.NET程序,每小時]可能的重複(http://stackoverflow.com/questions/2421252/how-to-run-a-net-program-automatically-every-hour ) – ChrisF 2012-02-28 16:06:32

回答

2

問題:你正在做一個「用戶空間」程序的程序,還是應該運行,即使用戶沒有登錄?換句話說,它應該永遠在嗎?

基本上,你是在做一些對用戶有用的事情,或者這對於將Web服務器的日誌文件歸檔到數據庫這樣的業務任務?

如果是前者,請繼續執行您的通知區域程序。如果是後者,則跳過通知區域程序並構建完整的Windows Service

在這兩種情況下,使用計時器;資源使用將是最小的。

+0

是的,它應該始終運行並對用戶登錄做出反應。 我可以使用.Net Timer類作爲定時器嗎? – Pascal 2012-02-28 16:08:26

+0

對用戶登錄做出反應意味着什麼?我意識到你可能不想泄露所有的東西,但是你究竟想要做什麼呢? **編輯**另外,您的Windows服務應該能夠通過覆蓋[OnSessionChange](http://msdn.microsoft.com/zh-cn/library/system.serviceprocess.servicebase.onsessionchange.aspx) – Randolpho 2012-02-28 16:11:53

+0

來檢測登錄需要編寫一個程序,獲得有關計算機的所有信息,如CPU模型,內存,圖形....它應該記錄用戶登錄和用戶註銷。它也應該可以讓用戶在應用程序中創建一條消息。 – Pascal 2012-02-28 16:14:49

8

沒有一直運行的程序,而只是每小時執行一次活動。編寫一個執行該活動的程序,然後使用Task Scheduler in windows每小時計劃一次。

+0

正是我要建議的 – Schwarzie2478 2012-02-28 16:04:20

+0

它有一個額外的好處,即當你的應用程序沒有執行活動時,它不會消耗任何資源,因爲它在那段時間並不實際運行。 – ChrisF 2012-02-28 16:05:32

+0

但應用程序應該給用戶與它交互的可能性。並且應用程序應對文件系統中的更改或用戶登錄或註銷時作出反應 – Pascal 2012-02-28 16:06:07

0

不確定處理成本,但是您可以在睡眠定時器中編碼,讓它在一個循環中睡眠一個小時,以便喚醒,運行,然後再次睡眠。不知道在睡覺時資源耗盡。此外,如果程序可能需要幾分鐘時間,則可以基於DateTime.Now DateTime對象計算睡眠時間,以便每小時在每小時醒來一次。

相關問題