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

本文关键字:缓存 应用程序 时区 运行 何清除 清除 使用 | 更新日期: 2023-09-27 18:10:58

描述

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

  1. 我创建了一个基于C#的应用程序,用于检查时间或时区是否更改,并将时间与设备同步。(APP1(
  2. 一种外部/第三方应用程序,它监视时间以进行数据处理,并在设定的时间执行必要的任务。(APP2(

还有另一个应用程序可以从主时钟中检查时区数据,并按固定时间表执行。每当主时钟发送时区更新命令时,此应用程序都会更新时区。

我已经配置了APP1来清除它自己的缓存,这样它就可以获得正确的时间(正如GregK在这里询问的那样(APP1工作正常。

问题

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

问题

有没有办法清除APP2的缓存,或者在不重新启动的情况下强制其采用时区更改?

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

这是我制作的解决方案。

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

这样,您就不需要重新启动应用程序。干杯