有沒有辦法讓c#中的日期更改通知?有沒有辦法讓c#中的日期更改通知?
我有一個要求,當系統日期改變時我必須做些什麼。
我發現SystemsEvent.TimeChanged是一個您可以掛鉤的事件,但只有在用戶更改時間時纔會觸發它。
有沒有辦法讓c#中的日期更改通知?有沒有辦法讓c#中的日期更改通知?
我有一個要求,當系統日期改變時我必須做些什麼。
我發現SystemsEvent.TimeChanged是一個您可以掛鉤的事件,但只有在用戶更改時間時纔會觸發它。
通過在午夜運行計劃任務/ cron作業可以更好地處理此問題嗎?
您可以實現這個(當然很差)如下:
寫一個非常輕量級的類簡單地存儲當前日期。在一個單獨的線程中啓動它,並定期檢查日期,然後睡眠大量時間(實際上,您可以讓它的睡眠時間比直到午夜的時間長)。如果日期發生變化,請在應用的主要部分調用回調函數。
就像我說的,這看起來不像是你的問題的一個明智的解決方案,並有可能有更好的方法來做到這一點。
真的沒有理由浪費這個線程。就像Darryl Braaten所建議的那樣加上回調。回調由一個線程池線程執行,所以你不需要有一個線程掛在這裏。 – 2008-12-16 19:57:25
你的應用程序可以運行一個睡眠一分鐘的循環,然後檢查日期。如果與上次不同,請運行您的邏輯。
但我同意這種情況會更好地處理一個計劃的任務。
不知道是否有這樣的事件,但如果沒有,可用的解決方法是每分鐘啓動一個計時器,並且如果時間在兩次呼叫之間改變超過5分鐘,那麼您可以確信時間已經以某種方式改變了。如果你喜歡,可以每隔一秒發射一次事件,並檢查超過10秒的時間差,但每分鐘都可能足夠。
您可能正在尋找System.Threading.Timer。它會在您設定的時間間隔內觸發。
假設你所要求的是當用戶改變他們PC的日期\時間就知道了,我知道做到這一點的唯一方法是監控事件日誌,是這樣的:
static System.Diagnostics.EventLog log = new EventLog("System");
public Form1()
{
log.EntryWritten += new EntryWrittenEventHandler(log_EntryWritten);
log.EnableRaisingEvents = true;
}
void log_EntryWritten(object sender, EntryWrittenEventArgs e)
{
if (e.Entry.InstanceId == 1 && e.Entry.EntryType == EventLogEntryType.Information)
Console.WriteLine("Test");
}
或者用這個DST信息: TimeZone.CurrentTimeZone.GetDaylightChanges(DateTime.Today.Year)
系統廣播WM_TIMECHANGE message當用戶改變系統日期/時間。處理這個問題的正確方法是處理該消息。我懷疑.net事件SystemEvents.TimeChanged只是一個包裝。
你應該描述你正在努力完成什麼,或者你的意思是系統日期變化。所有的答案都在猜測你真正的問題是什麼。 – 2008-12-16 20:06:46