2013-02-24 165 views
2

我在我的Windows应用程序中使用SystemEvents.TimeChanged事件,它触发两次。 我使用的代码:SystemEvents.TimeChanged触发两次

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和事件发生时的两倍。为什么?

+0

你确定你只改变了一次?例如小时然后分钟。这是一个使用消息泵的静态事件,因此如果它在编辑时在任何日期时间的任何部分夹住消息,就可以获得一批消息。事实上,由于没有输入值,因此点击ok按钮可能不是? – 2013-02-24 14:34:43

回答

1

只要收到WM_TIMECHANGE message就会触发事件。所以你需要寻找其他程序改变时间两次的原因,或者可能过于热情地改变了系统时间播出了此消息。很难推测,因为你没有描述你所做的改变时间。

当然这应该是从来没有是一个真正的问题。

0

就取消此事件它的发射和问题解决的第一时间:

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

    Console.WriteLine("Time changed: {0}", DateTime.Now); 
} 
+0

除非您想继续处理合法的时间更改事件。 – Blorgbeard 2015-08-19 01:39:56