System.DateTime和TimeZoneInfo和CultureInfo的缓存

时间:2011-05-06 14:50:57

标签: .net windows winforms winapi datetime

我有两个独立的.NET应用程序,一个服务器和另一个WinForms。 WinForms应用程序有一个时钟运行显示DateTime.Now当前时间。 Server应用程序可以更改框的TimeZone。我需要通知WinForms应用程序TimeZone已更改,以便Clock控件可以清除它的缓存并显示正确的时间。我可以发送一条消息,但我正在寻找一种标准的方式在Windows中完成它。 什么是最好的方法?在两者中注册消息并在WndProc中观察它吗?

2 个答案:

答案 0 :(得分:2)

好的,所以我要回答我自己的问题,因为它是专门针对系统事件的,而之前的答案提供了一个很好但通用的解决方案。基本上,我发现的是有一个Microsoft.Win32.SystemEvents类有一个TimeChanged事件。您在应用程序中所要做的就是执行以下操作:

SystemEvents.TimeChanged += (s, e) =>
        {
            CultureInfo.CurrentCulture.ClearCachedData();
            TimeZoneInfo.ClearCachedData();
        };

这将使DateTime的缓存无效,并且下次轮询时间时,您将在DateTime.Now结构中拥有正确的时间。

答案 1 :(得分:0)

由于它们都是.NET应用程序,因此我建议使用通信技术(例如Windows Communication Foundation)来启用应用程序之间的通信。

您的服务器将设置ServiceHost,您的WinForms应用程序将拥有您所设置服务的代理。

您可能希望设计服务,以便客户端可以传递callback,以便在服务器上的时区发生变化时,它可以通知客户端。