.NET アプリケーションの複数のスレッドにわたるカルチャ設定の管理
マルチスレッド .NET アプリケーションのすべてのスレッドにわたって一貫したカルチャ設定を維持することは困難な場合があります。 これは、文化情報がデータベースから取得され、均一に適用される必要がある場合に特に当てはまります。 各スレッドに CultureInfo.CurrentCulture
と CultureInfo.CurrentUICulture
を設定するだけでは非効率的でエラーが発生しやすくなります。 新しいスレッドはメインスレッドの初期カルチャを継承し、その後のカルチャの変更を無視します。
.NET 4.5 以降での簡素化されたカルチャ管理
.NET 4.5 以降のバージョンでは、CultureInfo.DefaultThreadCurrentCulture
を使用した簡単なソリューションが提供されます。このプロパティは、アプリケーション ドメイン内のすべてのスレッドのデフォルト カルチャを設定し、独自のカルチャを明示的に定義していないスレッドに影響を与えます。
コード例 (.NET 4.5):
<code class="language-csharp">CultureInfo ci = new CultureInfo("theCultureString"); // Replace "theCultureString" with your desired culture CultureInfo.DefaultThreadCurrentCulture = ci;</code>
古い .NET バージョン (4.5 より前) への対処
4.5 より前の .NET バージョンの場合、AppDomain のカルチャ設定を変更するには、リフレクションを使用した回避策が必要です。
コード例 (.NET 4.5 以前):
<code class="language-csharp">// Access the private field controlling the default culture using reflection FieldInfo field = typeof(CultureInfo).GetField("m_userDefaultCulture", BindingFlags.NonPublic | BindingFlags.Static); // Set the default culture field.SetValue(null, new CultureInfo("theCultureString")); // Replace "theCultureString" with your desired culture</code>
このリフレクションベースのメソッドは、ネイティブ スレッド ロケールを変更します。 機能しますが、互換性の問題が発生する可能性があるため、運用環境では通常は推奨されません。 テストまたは開発シナリオに最適です。
以上がマルチスレッド .NET アプリケーションでアプリケーション全体のカルチャ設定を効率的に設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。