0

在我的 Windows 窗体应用程序中,我的后台工作进程报告了本地化消息,我遇到了一些奇怪的行为。

该应用程序是一个带有 Windows 窗体的设置应用程序。该应用程序启动一个后台工作程序来执行和 IIS 重置,然后安装 MSI。

我第一次在西班牙语 Win Server 2003 VM 上运行应用程序时,表单是西班牙语,但不是 BWP 消息。如果我立即再次运行它,则消息为西班牙语。

.Resources 文件是嵌入式资源,在应用程序启动时被提取到 temp 目录。

我的代码通过自定义资源管理器类检索本地化字符串。此类为临时目录中的 .Resources 文件创建基于文件的资源。这工作正常,因为 Windows 窗体标签和标题每次都本地化。

有没有人经历过这个?我完全卡住了,请帮忙。谢谢,安德鲁

4

2 回答 2

4

如果您的 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;
                }
.
.
.
于 2012-01-17T16:39:58.323 回答
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

不过,我不确定跨线程传输文化信息的推荐做法是什么。

于 2008-10-10T08:18:31.437 回答