我在我的程序中執行了很長時間的方法。所以,我希望它在晚上執行,或者在用戶不使用應用程序時執行。編程方法執行的開始時間 - 當時開始執行的方法
用戶將在文本框中輸入時間和日期,我會將該值保存在數據庫中。
比方說,用戶進入27th December 2012, midnight.
我想Example()
方法開始在確切的時間執行。
有沒有辦法編程呢?
我在我的程序中執行了很長時間的方法。所以,我希望它在晚上執行,或者在用戶不使用應用程序時執行。編程方法執行的開始時間 - 當時開始執行的方法
用戶將在文本框中輸入時間和日期,我會將該值保存在數據庫中。
比方說,用戶進入27th December 2012, midnight.
我想Example()
方法開始在確切的時間執行。
有沒有辦法編程呢?
有多種選擇,你有什麼發現?
例如,您可以通過Windows任務調度程序運行任務,或者運行一個服務來定期檢查是否已經接近啓動特定任務的時間,如果是,則這樣做。
創建一個System.Timers.Timer對象。計算用戶輸入的時間減去當前時間(以毫秒爲單位)。將時間傳遞給計時器的構造函數,並將其作爲Elapsed事件處理程序。
試試這個:
if (DateTime.Now == your time)
{
// do your process
}
您在這裏有幾個選項 - 你可以有一個民意調查工作的數據庫來執行服務,當它的時候它執行的實例方法。 您可以編程方式創建一個Windows計劃任務,這種方式你不需要輪詢。
但是,在MVC中沒有任何方法可以提前定時接聽電話。
您可以使用Threading.Timer一定的延遲之後,開始你的方法:
DateTime date = // when you need method to run
TimeSpan dueTime = date - DateTime.Now;
Timer timer = new Timer(_ => Example(), null, dueTime, new TimeSpan(0));
您可以指定時間段TimeSpan(24, 0, 0)
每天執行方法。
你或許應該看看現有的庫作業調度如Quartz。特別是如果您計劃遞歸作業。
石英可能嵌入到現有應用程序中,或作爲獨立應用程序單獨運行。
由於@Ulises提到您可以使用作業調度程序,或者如果可以分離該任務的邏輯,則可以使用Windows調度程序。但是如果你需要在你的程序裏面做,那只是編碼問題。首先監督方法:
static void Supervisor()
{
while (true)
{
DateTime time = ReadTimeFromFile();
if (Math.Abs((DateTime.Now - time).TotalMinutes) <= 1)
{
DeleteTimeFile(); // to indicate task is done
RunTask();
break;
}
Thread.Sleep(TimeSpan.FromSeconds(5));
}
}
然後將目標時間寫入文件中。 並在程序的開始(或其他合適的地方):
new Task(Supervisor, TaskCreationOptions.LongRunning).Start();
它使用TaskCreationOptions.LongRunning選項來初始化一個單獨的線程來此之外,你線程池是非常重要的。
什麼是「執行長時間」? – bonCodigo
這是否已經作爲Windows服務運行? –
@MichaelPerrenoud嗯,沒有。爲什麼? –