我有一个 .NET 自定义控件,它以依赖于文化的方式显示信息。为了提高性能,我在控件内缓存了一些信息,而不是每次都生成它。我需要知道文化是否发生了变化,以便我可以适当地重新生成这些内部信息。
有什么我参与过的活动吗?或者我是否必须在每次绘画时测试文化设置,看看它是否发生了变化?
您可以处理该SystemEvents.UserPreferenceChanged事件:
SystemEvents.UserPreferenceChanged += (sender, e) =>
{
// Regional settings have changed
if (e.Category == UserPreferenceCategory.Locale)
{
// .NET also caches culture settings, so clear them
CultureInfo.CurrentCulture.ClearCachedData();
// do some other stuff
}
};
Run Code Online (Sandbox Code Playgroud)
Windows 还将WM_SETTINGSCHANGE消息广播到所有窗体。您可以尝试通过重写 WndProc 来检测它,因此它看起来像:
// inside a winforms Form
protected override void WndProc(ref Message m)
{
const int WM_SETTINGCHANGE = 0x001A;
if (m.Msg == WM_SETTINGCHANGE)
{
// .NET also caches culture settings, so clear them
CultureInfo.CurrentCulture.ClearCachedData();
// do some other stuff
}
base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)
请注意,您可能还想调用CultureInfo.CurrentCulture.ClearCachedData()以使新创建的线程的区域性信息无效,但请记住,CurrentCulture现有线程不会更新,如 MSDN 上所述:
该
ClearCachedData方法不会刷新现有线程的属性中的信息Thread.CurrentCulture。但是,未来的线程将具有新的CultureInfo属性值。
| 归档时间: |
|
| 查看次数: |
3954 次 |
| 最近记录: |