使用C#,如何清除正在运行的应用程序缓存以采用时区更改?

时间:2014-07-01 04:57:00

标签: c# date datetime timezone

描述

我有2个正在运行的应用程序:

  1. 我创建的基于C#的应用,用于检查时区或时区是否已更改,并将时间与设备同步。 (的 APP1
  2. 外部/第三方应用程序,它会花时间进行数据处理,并在设定的时间执行必要的任务。( APP2
  3. 还有另一个应用程序可以检查主时钟的时区数据并按固定的时间表执行。只要主时钟发送时区更新命令,此应用程序就会更新时区。

    我已将 APP1 配置为清除自己的缓存,以便获得正确的时间(如here by GregK所述)。 APP1 工作正常。

    问题

    因此,当时区发生变化时, APP2 会延迟执行计划任务,因为时间不正确。

    问题

    有没有办法清除 APP2 的缓存或强制它采用时区更改而不重新启动它?

1 个答案:

答案 0 :(得分:0)

这是我所做的解决方案。

APP1 会处理时间变更。它将存储服务器所在的当前时区。然后,当时区发生变化时,它会将时间存储到变量中,然后恢复上次使用的时区,并使用存储在变量中的新时间更新当前时间。这样,即使时区不会改变,服务器也可以采用时间变化。

Here's how在时区更改后获取正确的时间。

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();
}

getting the current timezone的另一个参考。

TimeZone localZone = TimeZone.CurrentTimeZone;
Console.WriteLine(localZone.StandardName);

这样,您无需重新启动应用程序。干杯!