實際上有東西直接內置到Windows這將做到這一點。它被稱爲Windows任務計劃程序!而不是讓Windows應用程序坐着並等待正確的時間運行一段代碼,最好使用底層系統實用程序並將代碼片段存儲在單獨的可執行文件中運行:它更容易和效率更高。
我以前使用過任務計劃程序來配置我的應用程序以啓動一個非常具體的計劃。執行.NET應用程序的最佳方法是使用使用this handy little library。
基本上,要完成您在問題中陳述的內容,您需要製作一個提供GUI的Windows應用程序。這個圖形用戶界面應該有選項來規範任務的創建和變更。任務應該啓動您必須運行的代碼(您應該將其存儲在單獨的可執行文件中,可能是透明的,因此隱藏的WinForms應用程序)。
下面是代碼from the CodeProject article of the library itself,說明如何創建任務:
//Get a ScheduledTasks object for the local computer.
ScheduledTasks st = new ScheduledTasks();
// Create a task
Task t;
try {
t = st.CreateTask("D checker");
} catch (ArgumentException) {
Console.WriteLine("Task name already exists");
return;
}
// Fill in the program info
t.ApplicationName = "chkdsk.exe";
t.Parameters = "d: /f";
t.Comment = "Checks and fixes errors on D: drive";
// Set the account under which the task should run.
t.SetAccountInformation(@"THEDOMAIN\TheUser", "HisPasswd");
// Declare that the system must have been idle for ten minutes before
// the task will start
t.IdleWaitMinutes = 10;
// Allow the task to run for no more than 2 hours, 30 minutes.
t.MaxRunTime = new TimeSpan(2, 30, 0);
// Set priority to only run when system is idle.
t.Priority = System.Diagnostics.ProcessPriorityClass.Idle;
// Create a trigger to start the task every Sunday at 6:30 AM.
t.Triggers.Add(new WeeklyTrigger(6, 30, DaysOfTheWeek.Sunday));
// Save the changes that have been made.
t.Save();
// Close the task to release its COM resources.
t.Close();
// Dispose the ScheduledTasks to release its COM resources.
st.Dispose();
注:priority
選項從來沒有工作對我來說,總是崩潰的應用程序。我建議你放棄它;通常情況下,這並沒有太大的區別。
有更多的代碼樣本on the article page,其中一些展示如何更改任務的設置,列出所有計劃任務等
對不起,我使用「同步」只是使事情複雜化。這只是一個Windows應用程序,用戶可以安排「任務」定期運行。我有一個數據庫,所以可以在那裏存儲數據。因此,使用Timer類看起來是一條可行的路線,但是您必須在代碼中執行日期/時間檢查嗎? (因爲計時器似乎沒有任何基於日曆的日程安排) – Greg 2010-03-22 04:45:49
我編輯了我的問題。請檢查。 – Shoban 2010-03-22 04:54:24
是...這個(即Task Scheduler Managed Wrapper)是我正在捕魚的那種東西......你認爲這是一種強健的方法嗎?用更簡單的話來說,使用定時器並在應用程序中寫入日期/時間檢查代碼會更健壯/更安全嗎?強大的我想我的意思是我可以假設它可以在沒有任何gottchas(alberit XP,或vista或Windows 7等)的任何PC上工作 – Greg 2010-03-22 05:02:10