C#学习教程:SetTimeZoneInformation不更新另一个.NET应用程序的DateTime.Now{TIME_ZONE_INFORMATION实际=newTIME_ZONE_INFORMATION();NativeMethods.GetTimeZoneInformation(出实际);如果(tzi==null||actual.StandardName==tzi.StandardName)返回;TIME_ZONE_INFORMATIONnewZone=(TIME_ZONE_INFORMATION)tzi;RunWin32Method(()=>NativeMethods.SetTimeZoneInformation(refnewZone));//更新.NETCultureInfo.CurrentCulture.ClearCachedData();TimeZoneInfo.ClearCachedData();//通知所有窗口我们更改了Windows设置。//结果为真IntPtrptr;System.Diagnostics.Debug.WriteLine(NativeMethods.SendMessageTimeout(NativeMethods.HWND_BROADCAST,NativeMethods.WMI_SETTING_CHANGE,IntPtr.Zero,IntPtr.Zero,0x00,1000,outptr));}当我调用我的方法时:ChangeTimeZone(TimeZoneInfo.GetSystemTimeZones().First(e=>!e.SupportsDaylightSavingTime));//停止调试器并观察其他.NET应用程序然后继续执行下一条指令ChangeTimeZone(TimeZoneInfo.GetSystemTimeZones().First(e=>e.StandardName.Contains("Romance")));这是另一个应用程序(App#2):staticvoidMain(string[]args){while(true){Console.WriteLine(DateTime.Now);线程.睡眠(500);DateTime的输出永远不会更新到新的TimeZone,为什么?编辑正如@Jon所说,通过添加CultureInfo.CurrentCulture.ClearCachedData();新日期将更新,但如前所述,我希望所有其他应用程序都使用这个新时区。我在后台使用DateTime.Now运行了很多应用程序,每次在检索本地更新日期之前都指定清除缓存是不好的……我怀疑你的第二个应用程序只是在使用缓存的时区数据。(毕竟这是一个单独的过程——清除应用程序1中的缓存不会影响应用程序2中的任何进程内缓存。)尝试在应用程序2中调用TimeZoneInfo.ClearCachedData并查看是否可以解决问题。以上是C#学习教程:SetTimeZoneInformation不会更新另一个.NET应用程序的DateTime.Now共享的全部内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处:
