我想檢測區域設置的變化,並在WPF應用程序中以正確的格式顯示日期。但CultureInfo.ClearCachedData存在一個奇怪的問題。它隨機要麼不工作。有人知道爲什麼,併爲此解決方法嗎?我知道區域設置存儲在註冊表中,但它太原始,無法破譯HKCU \ Control Panel \ International的內容,並通過它手動構建CultureInfo。CultureInfo.ClearCachedData不起作用。它隨機有時有時不工作
我已經把它放在一個更大的應用程序中,CultureInfo.ClearCachedData失敗率幾乎是100%。
Window1.xaml.cs:
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Interop;
namespace WpfApplication1
{
partial class Window1 : Window
{
int i = 0;
public Window1()
{
InitializeComponent();
ShownCurrentCulture();
Loaded += (x, y) => HwndSource.FromHwnd(
new WindowInteropHelper(this).Handle).AddHook(WndProc);
}
IntPtr WndProc(IntPtr hwnd, int msg,
IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == 0x1a) // WM_SETTINGCHANGE
{
// CultureInfo.CurrentCulture is sometimes changed,
// sometimes not
ShownCurrentCulture();
}
return IntPtr.Zero;
}
void ShownCurrentCulture()
{
CultureInfo.CurrentCulture.ClearCachedData();
Title = i++ + " " + CultureInfo.CurrentCulture;
}
}
}