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; }
static member DefaultThreadCurrentCulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentCulture As CultureInfo

プロパティ値

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

次の例は、新しいスレッドの現在のカルチャを定義する際の.NET Frameworkの既定の動作を示しています。 起動時に、既定のシステム カルチャが既にフランス語 (フランス) であるシステムを除くすべてのシステムで、現在のカルチャと現在の UI カルチャをフランス語 (フランス) に設定します。 既定のシステム カルチャが既にフランス語 (フランス) の場合、コードは現在のカルチャと現在の UI カルチャを英語 (米国) に設定します。 次に、ルーチンを DisplayRandomNumbers 呼び出します。これにより、3 つの乱数が生成され、通貨値として表示されます。 次に、ルーチンも実行する新しいスレッドを作成します 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 システム カルチャから派生しているため、作業スレッドは、英語 (米国) カルチャの書式設定規則を使用してその通貨値を表示します。

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

適用対象

こちらもご覧ください