English 中文(简体)
有没有一种方法可以在c#中获取日期更改的通知?
原标题:
  • 时间:2008-12-16 19:02:44
  •  标签:

有没有一种方法在C#中获取日期更改的通知?

当系统日期改变时,我有一个要求,必须执行某些操作。

我发现 SystemsEvent.TimeChanged 是一个你可以连接的事件,但只有当用户改变时间时才会被触发。

最佳回答

这个问题是否最好通过设置一个定时任务/定时脚本来在午夜运行来处理?

问题回答

你可以像下面这样(虽然不太好)实现它:

编写一个非常轻量级的类,仅用于存储当前日期。将其在一个单独的线程中启动,并定期检查日期,然后休眠一段很长时间(实际上,您可以使它休眠比午夜剩余的时间稍长)。如果日期已更改,请使其在应用程序的主要部分中调用回调函数。

就像我说的,这似乎不是解决你问题的好方法,可能还有更好的方法。

您可能正在寻找 System.Threading.Timer。 它将按您设置的间隔触发。

当用户更改系统日期/时间时,该系统会广播WM_TIMECHANGE消息。 处理该消息的正确方法是处理该消息。 我怀疑.NET事件SystemEvents.TimeChanged只是一个包装器。

假設您要求的是要知道使用者何時改變了他們電腦的日期和時間,我所知道的唯一做法是監視事件記錄,類似以下的方法:

    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");
    }

你的应用程序可以运行一个休眠一分钟的循环,然后检查日期。如果与上次不同,则运行您的逻辑。

但我同意这种情况最好由预定任务处理。

不确定是否有适合的事件,但如果没有,可使用的解决方法是每分钟触发定时器,如果在两次调用之间时间差超过5分钟,则可以确信时间以某种方式被更改。如果您希望更精细地处理,可以每秒触发事件并检查超过10秒的时间差,但每分钟可能已足够。

Or use this for DST info: TimeZone.CurrentTimeZone.GetDaylightChanges(DateTime.Today.Year)





相关问题
热门标签