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 при определении текущего языка и региональных параметров нового потока. При запуске пример задает для текущего языка и региональных параметров и региональных параметров пользовательского интерфейса значение французский (Франция) во всех системах, кроме тех, в которых по умолчанию уже используется французский язык (Франция). Если системный язык и региональные параметры по умолчанию уже заданы для французского языка (Франция), код задает для текущего языка и региональных параметров и региональных параметров пользовательского интерфейса английский (США). Затем он вызывает подпрограмму 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
Как показано в выходных данных примера, при выполнении примера на компьютере, системным языком и региональными параметрами которого является английский (США), поток main отображает свои денежные значения, используя соглашения о форматировании французского языка и региональных параметров (Франция). Тем не менее, так как язык и региональные параметры рабочего потока являются производными от текущего языка и региональных параметров Windows, а не из текущего языка и региональных параметров приложения, рабочий поток отображает свои денежные значения с использованием соглашений о форматировании английского языка (США).
В следующем примере свойства и DefaultThreadCurrentUICulture используются DefaultThreadCurrentCulture для определения текущего языка и региональных параметров и региональных параметров пользовательского интерфейса нового потока приложения. При запуске пример задает для текущего языка и региональных параметров и региональных параметров пользовательского интерфейса значение французский (Франция) во всех системах, кроме тех, в которых по умолчанию уже используется французский язык (Франция). Если системный язык и региональные параметры по умолчанию уже заданы для французского языка (Франция), он задает для текущего языка и региональных параметров и региональных параметров пользовательского интерфейса английский (США). Затем он вызывает подпрограмму 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 €
Как показано в выходных данных примера, при выполнении примера на компьютере с языком и региональными параметрами на английском языке (США) и поток main, и рабочий поток отображают свои денежные значения, используя соглашения о форматировании французского языка и региональных параметров (Франция).
Комментарии
В платформа .NET Framework 4 и предыдущих версиях по умолчанию для всех потоков задан язык и региональные параметры системы Windows. Для приложений, текущий язык и региональные параметры которых отличаются от системного языка и региональных параметров по умолчанию, такое поведение часто нежелательно. В платформа .NET Framework 4.5 DefaultThreadCurrentCulture свойство позволяет приложению определять язык и региональные параметры по умолчанию для всех потоков в домене приложения.
Важно!
Если вы явно не задали язык и региональные параметры для существующих потоков, выполняемых в домене приложения, задание DefaultThreadCurrentCulture свойства также изменяет язык и региональные параметры этих потоков. Однако если эти потоки выполняются в другом домене приложения, их язык и региональные параметры определяются свойством DefaultThreadCurrentCulture в этом домене приложения или, если значение по умолчанию не определено, системным языком и региональными параметрами по умолчанию. Поэтому рекомендуется всегда явно задавать язык и региональные параметры main потока приложения и не полагаться на DefaultThreadCurrentCulture свойство для определения языка и региональных параметров main потока приложения.
Если оно не задано явным образом, значение свойства равно null
, а язык DefaultThreadCurrentCulture и региональные параметры потоков в домене приложения, которым не назначен явный язык и региональные параметры, определяются системным языком и региональными параметрами Windows по умолчанию.
Дополнительные сведения о языках и региональных параметрах, потоках и доменах приложений см. в разделах "Язык и региональные параметры и потоки" и "Язык и региональные параметры и домены приложений" на справочной CultureInfo странице.