.Net后台工作进程本地化帮助
问题描述:
我在使用Windows窗体应用程序中的背景工作进程报告本地化消息时遇到了一些奇怪的行为。.Net后台工作进程本地化帮助
该应用程序是一个安装程序与Windows窗体。 该应用程序启动后台工作来执行和IIS重置,然后安装MSI。
我第一次在西班牙Win Server 2003 VM上运行该应用程序时,表单使用西班牙语,但不使用BWP消息。如果我立即再次运行它,这些消息是西班牙文。
.Resources文件是嵌入式资源,在应用程序启动时被解压缩到临时目录。
我的代码通过自定义资源管理器类检索本地化的字符串。此类为temp目录中的.Resources文件创建基于文件的资源。这是工作正常,因为Windows窗体标签和标题每次本地化。
有没有人遇到过这个?我绝对坚持,请帮助。 谢谢,安德鲁
答
文化信息是在线程本地存储,所以如果后台工作在不同的线程上运行进程,这可能是预期的。
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture.aspx
http://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture.aspx
我不知道什么transfering在线程之间的文化信息,推荐的做法,虽然。
答
如果您UIThread运行的其他的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;
}
.
.
.
这已经有一段时间,因为我问过这个问题,但我相信解决方案是在运行BWP之前首先将资源文件提取到Windows临时目录,然后使用CurrentUICulture作为消息。 – 2008-11-19 17:31:29