CultureInfo.DefaultThreadCurrentCulture プロパティ

定義

現在のアプリケーション ドメインのスレッドの既定のカルチャを取得または設定します。

public:
 static property System::Globalization::CultureInfo ^ DefaultThreadCurrentCulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public static System.Globalization.CultureInfo DefaultThreadCurrentCulture { get; set; }
public static System.Globalization.CultureInfo? DefaultThreadCurrentCulture { get; set; }
member this.DefaultThreadCurrentCulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentCulture As CultureInfo

プロパティ値

CultureInfo

現在のアプリケーション ドメインのスレッドの既定のカルチャ、または現在のシステム カルチャがアプリケーション ドメインの既定のスレッド カルチャの場合は null

次の例は、新しいスレッドの現在のカルチャを定義する.NET Frameworkの既定の動作を示しています。 この例では、スタートアップ時に、既定のシステム カルチャが既にフランス語 (フランス) であるシステムを除くすべてのシステムで、現在のカルチャと現在の UI カルチャをフランス語 (フランス) に設定します。 既定のシステム カルチャが既にフランス語 (フランス) の場合、コードは現在のカルチャと現在の UI カルチャを英語 (米国) に設定します。 次に、3 つの乱数を DisplayRandomNumbers 生成し、通貨値として表示するルーチンを呼び出します。 次に、ルーチンも実行する新しいスレッドを DisplayRandomNumbers 作成します。

using System;
using System.Globalization;
using System.Text;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Console.OutputEncoding = Encoding.UTF8;
      // Change current culture
      CultureInfo culture;
      if (Thread.CurrentThread.CurrentCulture.Name == "fr-FR")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("fr-FR");

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      // Generate and display three random numbers on the current thread.
      DisplayRandomNumbers();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(new ThreadStart(Example.DisplayRandomNumbers));
      workerThread.Start();
   }

   private static void DisplayRandomNumbers()
   {
      Console.WriteLine();
      Console.WriteLine("Current Culture:    {0}",
                        Thread.CurrentThread.CurrentCulture);
      Console.WriteLine("Current UI Culture: {0}",
                        Thread.CurrentThread.CurrentUICulture);

      Console.Write("Random Values: ");
      Random rand = new Random();
      for (int ctr = 0; ctr <= 2; ctr++)
         Console.Write("     {0:C2}     ", rand.NextDouble());

      Console.WriteLine();
   }
}
// The example displays output similar to the following:
//    Current Culture:    fr-FR
//    Current UI Culture: fr-FR
//    Random Values:      0,77 €          0,35 €          0,52 €
//
//    Current Culture:    en-US
//    Current UI Culture: en-US
//    Random Values:      $0.30          $0.79          $0.65
Imports System.Globalization
Imports System.Text
Imports System.Threading

Module Example

   Public Sub Main()
      Console.OutputEncoding = Encoding.UTF8 
      ' Change current culture
      Dim culture As CultureInfo
      If Thread.CurrentThread.CurrentCulture.Name = "fr-FR" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("fr-FR")
      End If   
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture
      
      ' Generate and display three random numbers on the current thread.
      DisplayRandomNumbers()
      Thread.Sleep(1000)
      
      Dim workerThread As New Thread(AddressOf Example.DisplayRandomNumbers)
      workerThread.Start()
   End Sub
   
   Private Sub DisplayRandomNumbers()
      Console.WriteLine()
      Console.WriteLine("Current Culture:    {0}", 
                        Thread.CurrentThread.CurrentCulture)
      Console.WriteLine("Current UI Culture: {0}", 
                        Thread.CurrentThread.CurrentUICulture)

      Console.Write("Random Values: ")
      Dim rand As New Random()
      For ctr As Integer = 0 To 2
         Console.Write("     {0:C2}     ", rand.NextDouble())
      Next      
      Console.WriteLine()
   End Sub
End Module
' The example displays output similar to the following:
'    Current Culture:    fr-FR
'    Current UI Culture: fr-FR
'    Random Values:      0,77 €          0,35 €          0,52 €     
'    
'    Current Culture:    en-US
'    Current UI Culture: en-US
'    Random Values:      $0.30          $0.79          $0.65

この例の出力が示すように、システム カルチャが英語 (米国) のコンピューターで例を実行すると、メイン スレッドはフランス語 (フランス) カルチャの書式設定規則を使用してその通貨値を表示します。 ただし、ワーカー スレッドのカルチャは、アプリケーションの現在のカルチャではなく、現在の Windows システム カルチャから派生しているため、作業スレッドは英語 (米国) カルチャの書式設定規則を使用してその通貨値を表示します。

次の例では、プロパティとDefaultThreadCurrentUICultureプロパティをDefaultThreadCurrentCulture使用して、新しいアプリケーション スレッドの現在のカルチャと現在の UI カルチャを定義します。 この例では、スタートアップ時に、既定のシステム カルチャが既にフランス語 (フランス) であるシステムを除くすべてのシステムで、現在のカルチャと現在の UI カルチャをフランス語 (フランス) に設定します。 既定のシステム カルチャが既にフランス語 (フランス) の場合は、現在のカルチャと現在の UI カルチャを英語 (米国) に設定します。 次に、3 つの乱数を DisplayRandomNumbers 生成し、通貨値として表示するルーチンを呼び出します。 次に、ルーチンも実行する新しいスレッドを DisplayRandomNumbers 作成します。

using System;
using System.Globalization;
using System.Text;
using System.Threading;

public class Example
{
   public static void Main()
   {
      Console.OutputEncoding = Encoding.UTF8;
      // Change current culture
      CultureInfo culture;
      if (Thread.CurrentThread.CurrentCulture.Name == "fr-FR")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("fr-FR");

      CultureInfo.DefaultThreadCurrentCulture = culture;
      CultureInfo.DefaultThreadCurrentUICulture = culture;

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      // Generate and display three random numbers on the current thread.
      DisplayRandomNumbers();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(new ThreadStart(Example.DisplayRandomNumbers));
      workerThread.Start();
   }

   private static void DisplayRandomNumbers()
   {
      Console.WriteLine();
      Console.WriteLine("Current Culture:    {0}",
                        Thread.CurrentThread.CurrentCulture);
      Console.WriteLine("Current UI Culture: {0}",
                        Thread.CurrentThread.CurrentUICulture);

      Console.Write("Random Values: ");
      Random rand = new Random();
      for (int ctr = 0; ctr <= 2; ctr++)
         Console.Write("     {0:C2}     ", rand.NextDouble());

      Console.WriteLine();
   }
}
// The example displays output similar to the following:
//    Current Culture:    fr-FR
//    Current UI Culture: fr-FR
//    Random Values:      0,78 €          0,80 €          0,37 €
//
//    Current Culture:    fr-FR
//    Current UI Culture: fr-FR
//    Random Values:      0,52 €          0,32 €          0,15 €
Imports System.Globalization
Imports System.Text
Imports System.Threading

Module Example
   Public Sub Main()
      Console.OutputEncoding = Encoding.UTF8 
      ' Change current culture
      Dim culture As CultureInfo
      
      If Thread.CurrentThread.CurrentCulture.Name = "fr-FR" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("fr-FR")
      End If   
      CultureInfo.DefaultThreadCurrentCulture = culture
      CultureInfo.DefaultThreadCurrentUICulture = culture
      
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture
      
      ' Generate and display three random numbers on the current thread.
      DisplayRandomNumbers()
      Thread.Sleep(1000)
      
      Dim workerThread As New Thread(AddressOf Example.DisplayRandomNumbers)
      workerThread.Start()
   End Sub
   
   Private Sub DisplayRandomNumbers()
      Console.WriteLine()
      Console.WriteLine("Current Culture:    {0}", 
                        Thread.CurrentThread.CurrentCulture)
      Console.WriteLine("Current UI Culture: {0}", 
                        Thread.CurrentThread.CurrentUICulture)
      Console.Write("Random Values: ")
      Dim rand As New Random()
      For ctr As Integer = 0 To 2
         Console.Write("     {0:C2}     ", rand.NextDouble())
      Next      
      Console.WriteLine()
   End Sub
End Module
' The example displays output similar to the following:
'    Current Culture:    fr-FR
'    Current UI Culture: fr-FR
'    Random Values:      0,78 €          0,80 €          0,37 €
'    
'    Current Culture:    fr-FR
'    Current UI Culture: fr-FR
'    Random Values:      0,52 €          0,32 €          0,15 €

この例の出力が示すように、システム カルチャが英語 (米国) のコンピューターで例を実行すると、メイン スレッドとワーカー スレッドの両方に、フランス語 (フランス) カルチャの書式規則を使用して通貨値が表示されます。

注釈

.NET Framework 4 以前のバージョンでは、既定では、すべてのスレッドのカルチャが Windows システム カルチャに設定されています。 現在のカルチャが既定のシステム カルチャと異なるアプリケーションの場合、この動作は望ましくないことがよくあります。 .NET Framework 4.5 では、このプロパティを使用すると、DefaultThreadCurrentCultureアプリケーションはアプリケーション ドメイン内のすべてのスレッドの既定のカルチャを定義できます。

重要

アプリケーション ドメインで実行されている既存のスレッドのカルチャを明示的に設定していない場合は、プロパティを設定すると DefaultThreadCurrentCulture 、これらのスレッドのカルチャも変更されます。 ただし、これらのスレッドが別のアプリケーション ドメインで実行される場合、そのカルチャはそのアプリケーション ドメインのプロパティによって DefaultThreadCurrentCulture 定義されるか、既定値が定義されていない場合は既定のシステム カルチャによって定義されます。 このため、メイン アプリケーション スレッドのカルチャを常に明示的に設定し、メイン アプリケーション スレッドのカルチャを定義するプロパティに DefaultThreadCurrentCulture 依存しないことをお勧めします。

明示的に設定しない限り、プロパティのDefaultThreadCurrentCulture値は null、明示的なカルチャが割り当てられていないアプリケーション ドメイン内のスレッドのカルチャは、既定のWindowsシステム カルチャによって定義されます。

カルチャ、スレッド、およびアプリケーション ドメインの詳細については、リファレンス ページの「カルチャとスレッド」および「カルチャとアプリケーション ドメイン」セクションを CultureInfo 参照してください。

適用対象

こちらもご覧ください