2008-12-16 71 views
9

有沒有辦法讓c#中的日期更改通知?有沒有辦法讓c#中的日期更改通知?

我有一個要求,當系統日期改變時我必須做些什麼。

我發現SystemsEvent.TimeChanged是一個您可以掛鉤的事件,但只有在用戶更改時間時纔會觸發它。

+0

你應該描述你正在努力完成什麼,或者你的意思是系統日期變化。所有的答案都在猜測你真正的問題是什麼。 – 2008-12-16 20:06:46

回答

6

通過在午夜運行計劃任務/ cron作業可以更好地處理此問題嗎?

2

您可以實現這個(當然很差)如下:

寫一個非常輕量級的類簡單地存儲當前日期。在一個單獨的線程中啓動它,並定期檢查日期,然後睡眠大量時間(實際上,您可以讓它的睡眠時間比直到午夜的時間長)。如果日期發生變化,請在應用的主要部分調用回調函數。

就像我說的,這看起來不像是你的問題的一個明智的解決方案,並有可能有更好的方法來做到這一點。

+0

真的沒有理由浪費這個線程。就像Darryl Braaten所建議的那樣加上回調。回調由一個線程池線程執行,所以你不需要有一個線程掛在這裏。 – 2008-12-16 19:57:25

0

你的應用程序可以運行一個睡眠一分鐘的循環,然後檢查日期。如果與上次不同,請運行您的邏輯。

但我同意這種情況會更好地處理一個計劃的任務。

0

不知道是否有這樣的事件,但如果沒有,可用的解決方法是每分鐘啓動一個計時器,並且如果時間在兩次呼叫之間改變超過5分鐘,那麼您可以確信時間已經以某種方式改變了。如果你喜歡,可以每隔一秒發射一次事件,並檢查超過10秒的時間差,但每分鐘都可能足夠。

1

假設你所要求的是當用戶改變他們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"); 
    } 
0

或者用這個DST信息: TimeZone.CurrentTimeZone.GetDaylightChanges(DateTime.Today.Year)

2

系統廣播WM_TIMECHANGE message當用戶改變系統日期/時間。處理這個問題的正確方法是處理該消息。我懷疑.net事件SystemEvents.TimeChanged只是一個包裝。

相關問題