2012-02-07 129 views
1

所以,我目前在我的解决方案中的一个静态变量中可以访问所有类的ResourceManager实例。我用它来获取单线程操作的翻译内容,并且它工作得很好,很花哨。在C#中的多线程环境中使用ResourceManager的正确方法?

但是,我添加了一个需要更长时间才能执行的操作,我需要更新UI中的进度。对于进度信息字符串,我也使用ResourceManager。事情是,如果它在一个单独的线程上执行,则相同的确切代码行返回null(例如Localization.ResourceManager.GetString(“ProgressInformation1”))。但是如果我不为它启动一个新线程,它会按照预期返回字符串。我检查了MSDN库,并根据它,ResourceManager应该是线程安全的和所有。那么我做错了什么?

+1

你可以发表一些代码来证明这个问题吗? – 2012-02-07 12:57:36

+0

也许另一个线程的'CurrentUICulture'与原始文件不同,并且该字符串没有为后备文化定义? – 2012-02-07 12:58:51

+0

这确实和设置新线程的文化一样简单。我觉得这一点令人惊讶的是,我认为我目前支持的两种语言中的一种语言确实是后备语言之一,但我想不是:)请谨慎对此作出回答,以便我可以选择它? – bobblez 2012-02-07 13:14:23

回答

1

也许你需要为你运行的线程指定CurrentCulture和CurrentUICulture。 只需使用“主”线程中的那些。

+1

我认为你应该把它写成评论,而不是回答。 – ken2k 2012-02-07 13:08:19