Хорошо, так что я собираюсь ответить на свой собственный вопрос, поскольку он был конкретно о системных событиях, а предыдущий ответ дал хорошее, но общее решение. По сути, я обнаружил, что существует класс Microsoft.Win32.SystemEvents
, который имеет событие TimeChanged
. Все, что вам нужно сделать в вашем приложении, это сделать что-то вроде следующего:
SystemEvents.TimeChanged += (s, e) =>
{
CultureInfo.CurrentCulture.ClearCachedData();
TimeZoneInfo.ClearCachedData();
};
Это приведет к аннулированию кэша DateTime, и в следующий раз, когда вы будете опрашивать время, у вас будет правильное время в вашей структуре DateTime.Now.