我在Windows窗体应用程序中使用后台工作进程报告的本地化消息遇到了一些奇怪的行为。
该应用程序是一个带有Windows窗体的安装应用程序。 应用程序启动后台工作程序以执行和重置IIS,然后安装MSI。
我第一次在西班牙语Win Server 2003 VM上运行该应用程序时,表单是西班牙语而不是BWP消息。如果我立即再次运行它,消息是西班牙语。
.Resources文件是嵌入式资源,在应用程序启动时被提取到临时目录。
我的代码通过自定义资源管理器类检索本地化字符串。此类为临时目录中的.Resources文件创建基于文件的资源。这是正常的,因为每次都会对窗体表格标签和标题进行本地化。
有没有人经历过这个?我绝对卡住了,请帮忙。 谢谢,安德鲁
答案 0 :(得分:4)
如果您的UI线程运行的另一个UICulture而不是BackgroundWorker,您可以通过使用这样的回调显式更改工作线程的文化:
private delegate CultureInfo GetUICultureCallback();
private CultureInfo GetUICulture()
{
if (this.InvokeRequired)
{
return (CultureInfo)this.Invoke(new GetUICultureCallback(GetUICulture));
}
return System.Threading.Thread.CurrentThread.CurrentUICulture;
}
void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = GetUICulture();
for (; ; )
{
if (backgroundWorker.CancellationPending)
{
e.Cancel = true;
return;
}
.
.
.
答案 1 :(得分:1)
文化信息位于线程本地存储中,因此如果后台工作程序在不同的线程上运行进程,则可能会出现这种情况。
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture.aspx
http://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture.aspx
我不确定在线程之间传输文化信息的推荐做法是什么。