C#アプリでWindowsシステムの日付/時刻が変更されたときに通知を受け取りたいのですが。SystemEvents.TimeChangedイベントを見つけました。これについては、MSDNのドキュメントに次のように記載されています。
ユーザーがシステム時計の時刻を変更したときに発生します。
NTPによってクロックが変更された場合にも、このイベントは発生しますか?または、購読できる別のイベントはありますか?
実装の詳細:
timer.Elapsedイベントを特定の日時に発生させたい。私のコードは、タイマーに使用するために必要な間隔を計算します。システム時刻が変更された場合は、この計算を再評価して、新しい間隔を計算し、タイマーを更新する必要があります。
回答の要約
すべてのコメントをありがとう。今後の参考のために、それらを以下に要約します。
- SystemEvents.TimeChangedは、ユーザーの変更時、およびシステムがNTPサーバーとの再同期を要求したときに発生します
- Windowsサービスで実行している場合は、TimeChangedイベントを取得するためにメッセージポンプを処理する必要があります。これは、ディスパッチャを実行することで実現できます。
- NTPサーバーは、個別のシステム日付変更を適用しません。計算されたクロックドリフトとローカルクロックと他のNTPサーバー間のオフセットを考慮して、NTPクロック調整が徐々に適用されます。
- 私の実装では、タイマー間隔を定期的に評価して、システム時間の変更を考慮に入れる方が、間隔を1回設定して起動したままにするよりも、適切です。