0

Windows フォーム アプリケーションのバックグラウンド ワーカー プロセスから報告されたローカライズされたメッセージで奇妙な動作が発生しています。

アプリケーションは、Windows フォームを使用したセットアップ アプリケーションです。アプリケーションはバックグラウンド ワーカーを起動して実行し、IIS をリセットしてから MSI をインストールします。

スペインの Win Server 2003 VM でアプリケーションを初めて実行したとき、フォームはスペイン語ですが、BWP メッセージは表示されません。すぐにもう一度実行すると、メッセージはスペイン語になります。

.Resources ファイルは埋め込みリソースであり、アプリケーションの起動時に一時ディレクトリに抽出されます。

私のコードは、カスタム リソース マネージャー クラスを介してローカライズされた文字列を取得します。このクラスは、一時ディレクトリ内の .Resources ファイルにファイル ベースのリソースを作成します。Windows フォームのラベルとタイトルが毎回ローカライズされるため、これは正しく機能しています。

誰もこれを経験しましたか?私は絶対に立ち往生しています、助けてください。ありがとう、アンドリュー

4

2 に答える 2

4

UIThread が BackgroundWorker 以外の UICulture を実行する場合、次のようなコールバックを使用してワーカー スレッドのカルチャを明示的に変更できます。

        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 に答える