4

Windows アプリケーションで SystemEvents.TimeChanged イベントを使用していますが、2 回発生します。私が使用するコード:

using System;
using Microsoft.Win32;

namespace DateTimeTests
{
    class Program
    {
        static void Main(string[] args)
        {
            SystemEvents.TimeChanged += new EventHandler(SystemEvents_TimeChanged);
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }

        static void SystemEvents_TimeChanged(object sender, EventArgs e)
        {
            Console.WriteLine("Time changed: {0}", DateTime.Now);
        }
    }
}

Windows で時刻を変更しようとすると、イベントが 2 回発生します。なんで?

4

4 に答える 4

0

このイベントが最初に発生したときにリンクを解除するだけで、問題は解決します。

static void SystemEvents_TimeChanged(object sender, EventArgs e)
{
    SystemEvents.TimeChanged -= new EventHandler(SystemEvents_TimeChanged);

    Console.WriteLine("Time changed: {0}", DateTime.Now);
}
于 2015-03-02T13:46:44.333 に答える
0

WM_TIMECHANGE メッセージを受信するたびにイベントを発生させるだけです。そのため、別のプログラムが時刻を 2 回変更した理由、またはおそらく熱心にシステム時刻を変更してこのメ​​ッセージをブロードキャストした理由を探す必要があります。時間を変更するために何をしたかを説明していないため、推測するのは困難です。

もちろん、これは決して実際の問題ではありません。

于 2013-02-24T14:40:14.547 に答える