如何解决从后台工作线程中的语言资源文件中获取本地化的字符串
|| 我开发了一个本地化的应用程序,具有多语言界面。为此,我使用了winform的可本地化功能以及语言字符串资源。到目前为止,效果很好。 问题来了,当我不得不尝试在后台工作进程中获取本地化的字符串时:它不能使用当前的UI文化,而使用默认的UI文化。 ResourceManager的GetString方法返回默认语言字符串,而不是CurrentUICulture的字符串。请注意,它在主线程中运行良好,问题出在backgroundworker内部。 那么,如何才能从backgroundworker线程中的语言资源文件中获取基于当前ui文化的本地化字符串? 环境:.net4,c#,Visual Studio 2010。 提前致谢!解决方法
您需要在后台线程上设置Thread.CurrentCulture和Thread.CurrentUICulture属性以与前台线程的属性匹配。这应该在后台线程上运行的代码的开始处完成。
,即使已接受的对这个问题的答案是绝对正确的,但我还是要用我必须对相当大的系统进行本地化后学到的知识来补充它。
每次需要使用
BackgroundWorker
时都设置Thread.CurrentCulture
和Thread.CurrentUICulture
容易出错,并且很难维护,特别是在系统的多个不同部分上执行此操作时。为了避免这种情况,您可以创建一个简单的类,该类继承自BackgroundWorker
并始终在运行代码之前设置区域性:
public class LocalizedBackgroundWorker : BackgroundWorker {
private readonly CultureInfo currentCulture;
public LocalizedBackgroundWorker() {
currentCulture = /* Get your current culture somewhere */
}
protected override void OnDoWork(DoWorkEventArgs e) {
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;
base.OnDoWork(e);
}
}
现在只需使用LocalizedBackgroundWorker
类而不是BackgroundWorker
,您就可以开始了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。