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