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 по умолчанию при определении текущего языка и региональных параметров нового потока. При запуске в примере задается текущий язык и региональные параметры пользовательского интерфейса для французского языка (Франция) во всех системах, за исключением тех, на которых системный язык по умолчанию уже французский (Франция). Если системный язык и региональные параметры по умолчанию уже французский (Франция), код задает текущий язык и региональные параметры и региональные параметры пользовательского интерфейса на английский (США). Затем он вызывает подпрограмму 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 системного языка, а не текущего языка и региональных параметров приложения, рабочий поток отображает свои денежные значения с использованием соглашений о форматировании языка и региональных параметров английского языка (США).

В следующем примере используются DefaultThreadCurrentCulture свойства и параметры для определения текущего языка и DefaultThreadCurrentUICulture региональных параметров и текущего языка пользовательского интерфейса нового потока приложения. При запуске в примере задается текущий язык и региональные параметры пользовательского интерфейса для французского языка (Франция) во всех системах, за исключением тех, на которых системный язык по умолчанию уже французский (Франция). Если системный язык по умолчанию уже французский (Франция), он задает текущий язык и региональные параметры и региональные параметры пользовательского интерфейса на английский (США). Затем он вызывает подпрограмму 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 странице.

Применяется к

См. также раздел