Вы можете использовать событие SystemEvents.TimeChanged
для определения измененного времени. Однако, это сработает, только если у вас запущен насос сообщений - это хорошо для клиентских приложений Windows, но не так много для большинства серверных приложений (таких как сервисы, веб-приложения и т. Д.).
В противном случае вы можете использовать Environment.TickCount
- у него нет отличного разрешения, но если ваши "10" секунд могут быть "почти 10 секунд", вы, вероятно, в порядке. Что касается ограничения виртуальной машины, обратите внимание, что TickCount переворачивается, когда машина проработала достаточно долго, поэтому вам придется справиться с этим, возможно, с проверкой работоспособности DateTime.UtcNow
в любом случае.
Я бы использовал комбинацию обоих - но учтите, что нет абсолютно точного способа, кроме проверки какого-либо внешнего точного сервера, который известен точно (который будет иметь перфорированное воздействие), который будет работать в случае с ВМ в любом случае ... убедитесь, что вы определили, что является «достаточно надежным», прежде чем тратить больше времени, чем стоит проблема.