有没有一种方法在C#中获取日期更改的通知?
当系统日期改变时,我有一个要求,必须执行某些操作。
我发现 SystemsEvent.TimeChanged 是一个你可以连接的事件,但只有当用户改变时间时才会被触发。
有没有一种方法在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)