.Net后台工作进程本地化帮助

.Net后台工作进程本地化帮助,.net,localization,process,background,worker,.net,Localization,Process,Background,Worker,我在windows窗体应用程序中的后台工作进程报告的本地化消息中遇到一些奇怪的行为 该应用程序是带有windows窗体的安装应用程序。 应用程序启动后台工作程序以执行和重置IIS,然后安装MSIs 我第一次在西班牙Win Server 2003虚拟机上运行应用程序时,表单是西班牙语的,但不是BWP消息。如果我立即再次运行它,消息是西班牙语的 .Resources文件是嵌入式资源,在应用程序启动时被提取到temp目录 我的代码通过自定义资源管理器类检索本地化字符串。此类为临时目录中的.Resour

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

该应用程序是带有windows窗体的安装应用程序。 应用程序启动后台工作程序以执行和重置IIS,然后安装MSIs

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

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

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

有人经历过吗?我完全卡住了,请帮帮我。
谢谢,Andrew,区域性信息位于线程本地存储中,因此如果后台工作程序在不同的线程上运行进程,这可能是意料之中的


不过,我不确定跨线程传输区域性信息的推荐做法。

区域性信息位于线程本地存储中,因此如果后台工作人员在不同线程上运行进程,这可能是意料之中的


但是,我不确定跨线程传输区域性信息的推荐做法是什么。

如果您的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;
                }
.
.
.

如果您的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 temp目录,并使用CurrentUICulture处理消息。我问这个问题已经有一段时间了,但我相信解决方案是在运行BWP之前首先将资源文件解压缩到windows临时目录,并使用CurrentUICulture处理消息。