描述
我有两个正在运行的应用程序:
- 我创建了一个基于C#的应用程序,用于检查时间或时区是否更改,并将时间与设备同步。(APP1(
- 一种外部/第三方应用程序,它监视时间以进行数据处理,并在设定的时间执行必要的任务。(APP2(
还有另一个应用程序可以从主时钟中检查时区数据,并按固定时间表执行。每当主时钟发送时区更新命令时,此应用程序都会更新时区。
我已经配置了APP1来清除它自己的缓存,这样它就可以获得正确的时间(正如GregK在这里询问的那样(APP1工作正常。
问题
因此,当时区发生变化时,APP2会延迟执行其计划任务,因为它得到的时间不正确。
问题
有没有办法清除APP2的缓存,或者在不重新启动的情况下强制其采用时区更改?
这是我制作的解决方案。
APP1将处理时间更改。它将存储服务器所在的当前时区。然后,当时区发生变化时,它将把时间存储到一个变量中,然后恢复上次使用的时区,并使用存储在变量中的新时间更新当前时间。这样,即使时区不会改变,服务器也可以适应时间的变化。
以下是如何在时区更改后获得正确的时间。
protected override void OnClosed ( EventArgs e )
{
base.OnClosed(e);
SystemEvents.TimeChanged -= SystemEvents_TimeChanged;
}
protected override void OnLoad ( EventArgs e )
{
base.OnLoad(e);
SystemEvents.TimeChanged += SystemEvents_TimeChanged;
}
void SystemEvents_TimeChanged ( object sender, EventArgs e )
{
TimeZoneInfo.ClearCachedData();
}
private void timer1_Tick ( object sender, EventArgs e )
{
label1.Text = DateTime.Now.ToString();
}
获取当前时区的另一个参考。
TimeZone localZone = TimeZone.CurrentTimeZone;
Console.WriteLine(localZone.StandardName);
这样,您就不需要重新启动应用程序。干杯