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