CultureInfo.DefaultThreadCurrentCulture Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém ou define a cultura padrão para threads no domínio de aplicação atual.
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; }
static member DefaultThreadCurrentCulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentCulture As CultureInfo
Valor de Propriedade
A cultura padrão para threads no domínio de aplicação atual, ou null se a cultura do sistema atual for a cultura de threads padrão no domínio da aplicação.
Exemplos
O exemplo seguinte ilustra o comportamento padrão do .NET Framework na definição da cultura atual de um novo thread. No arranque, o exemplo define a cultura atual e a cultura atual da interface como francesa (França) em todos os sistemas, exceto aqueles em que a cultura padrão já é francesa (França). Se a cultura padrão do sistema já for francesa (França), o código define a cultura atual e a cultura atual da interface para inglês (Estados Unidos). Depois chama a DisplayRandomNumbers rotina, que gera três números aleatórios e os apresenta como valores de moeda. De seguida, cria um novo thread, que também executa a DisplayRandomNumbers rotina.
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
Como a saída do exemplo mostra, quando o exemplo é executado num computador cuja cultura do sistema é Inglesa (Estados Unidos), o fio principal apresenta os seus valores monetários usando as convenções de formatação da cultura francesa (França). No entanto, como a cultura do thread de trabalho deriva da cultura do sistema Windows atual e não da cultura atual da aplicação, o thread de trabalho apresenta os seus valores monetários usando as convenções de formatação da cultura inglesa (Estados Unidos).
O exemplo seguinte utiliza as DefaultThreadCurrentCulture propriedades e DefaultThreadCurrentUICulture para definir a cultura atual e a cultura atual da interface de utilizador de uma nova thread de aplicação. No arranque, o exemplo define a cultura atual e a cultura atual da interface como francesa (França) em todos os sistemas, exceto aqueles em que a cultura padrão já é francesa (França). Se a cultura do sistema por defeito já for francesa (França), define a cultura atual e a cultura atual da interface para inglês (Estados Unidos). Depois chama a DisplayRandomNumbers rotina, que gera três números aleatórios e os apresenta como valores de moeda. De seguida, cria um novo thread, que também executa a DisplayRandomNumbers rotina.
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 €
Como a saída do exemplo mostra, quando o exemplo é executado num computador cuja cultura do sistema é inglesa (Estados Unidos), tanto o thread principal como o worker thread exibem os seus valores monetários usando as convenções de formatação da cultura francesa (França).
Observações
No .NET Framework 4 e versões anteriores, por defeito, a cultura de todos os threads é definida para a cultura do sistema Windows. Para aplicações cuja cultura atual difere da cultura padrão do sistema, este comportamento é frequentemente indesejável. No .NET Framework 4.5, a propriedade DefaultThreadCurrentCulture permite a uma aplicação definir a cultura padrão de todos os threads num domínio de aplicação.
Importante
Se não definiu explicitamente a cultura de quaisquer threads existentes a executar num domínio de aplicação, definir a DefaultThreadCurrentCulture propriedade também altera a cultura dessas threads. No entanto, se estas threads são executadas noutro domínio de aplicação, a sua cultura é definida pela DefaultThreadCurrentCulture propriedade nesse domínio de aplicação ou, se não houver valor padrão definido, pela cultura do sistema padrão. Por isso, recomendamos que defina sempre explicitamente a cultura do seu thread principal de aplicação, e que não dependa dessa DefaultThreadCurrentCulture propriedade para definir a cultura do thread principal da aplicação.
A menos que seja definida explicitamente, o valor da propriedade DefaultThreadCurrentCulture é null, e a cultura dos threads num domínio de aplicação que não foram atribuídos a uma cultura explícita é definida pela cultura padrão Windows sistema.
Para mais informações sobre culturas, threads e domínios de aplicação, consulte as secções "Cultura e threads" e "Cultura e domínios de aplicação" na CultureInfo página de referência.