サーバー上でサービスとしてアプリケーションを実行した後、そのサービスに複数のクライアントが接続しています。私はクライアントのWindowフォームアプリケーションのそれぞれに正確なサーバー時間を表示します。そのため、サーバー上の任意の時刻の変更を検出するメカニズムが必要なため、表示するクライアントに送信できます。C#イベントで夏時間や手動による時刻変更を検出する
SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
static void SystemEvents_TimeChanged(object sender, EventArgs e)
{
//Occurs when user manually changes the time or due to
//daylight saving time. Server will issue its latest time
//to all the clients so time can be adjusted.
}
残念ながら、私はサービスとしてこれを実行すると:私はVisual Studioに以下のコードをテストするとき、すべてが素晴らしい作品ので、私は、私は運にいると思った、SystemEvents.TimeChangedを発見したMSDNを見ている
このイベントは、MSDNの細かい印刷物を見ているので、決して解雇されることはありません。TimeChangedイベントは、メッセージポンプ(別名、実行中のフォームを持っている必要があります)がアクティブなアプリケーションでのみ発生します。これは、非サービスモードとして実行するとフォームがあるため、Visual Studioで動作します。
「サービスがデスクトップとやりとりすることを許可する」オプションをチェックすることでこれを訂正できますが、その種のサービスはアプリケーションをサービスとして実行しようとする目的に反するものです。
アプリケーションでタイマーのイベントを作成して時間の変化を確認することができますが、10秒ごとにそうだとしますが、これはサーバーのマシンで発生するランダムな時間の変化を2回確認するだけの大きなオーバーヘッドです1年に3回
メッセージポンプが搭載されていないアプリケーションで動作するC#イベントが時間の変化を引き起こすことは誰も知っていますか? Microsoftがこのように動作するイベントを含まない場合は驚きです。
ありがとうございます。
SystemEventsクラスは、必要に応じて別のスレッドでメッセージループをポンピングします。それを試してみてください。 –