从后台工作线程中的语言资源文件中获取本地化的字符串

|| 我开发了一个本地化的应用程序,具有多语言界面。为此,我使用了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
,您就可以开始了。     

要回复问题请先登录注册