【问题标题】:Is there a way to get notification of date change in c#?有没有办法在 c# 中获取日期更改通知?
【发布时间】:2008-12-16 19:02:44
【问题描述】:

有没有办法在 c# 中获取日期更改通知?

我有一个要求,当系统日期更改时我必须做一些事情。

我发现 SystemsEvent.TimeChanged 是一个可以挂钩的事件,但只有在用户更改时间时才会触发它。

【问题讨论】:

  • 您应该描述您想要完成的任务和/或系统日期更改的含义。所有的答案都在猜测你真正的问题是什么。

标签: c# date


【解决方案1】:

安排一个在午夜运行的计划任务/cron 作业会更好地处理这个问题吗?

【讨论】:

    【解决方案2】:

    您可以按如下方式实现(当然很糟糕):

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

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

    【讨论】:

    • 真的没有理由在这上面浪费一个线程。只需按照 Darryl Braaten 的建议添加回调即可。回调由线程池线程执行,因此您不需要为此挂起线程。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        假设您要知道用户何时更改其 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");
            }
        

        【讨论】:

          【解决方案6】:

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

          但我同意使用计划任务更好地处理这种情况。

          【讨论】:

            【解决方案7】:

            不确定是否有此事件,但如果没有,可用的解决方法是每分钟触发一次计时器,如果两次调用之间的时间变化超过 5 分钟,那么您可以确定时间已经以某种方式改变了。如果您愿意,可以通过每秒触发一次事件并检查超过 10 秒的时间差来进行更精细的处理,但每分钟可能就足够了。

            【讨论】:

              【解决方案8】:

              或将其用于 DST 信息: TimeZone.CurrentTimeZone.GetDaylightChanges(DateTime.Today.Year)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-01-28
                • 1970-01-01
                • 1970-01-01
                • 2016-04-21
                • 2020-01-15
                相关资源
                最近更新 更多