CultureInfo.DefaultThreadCurrentCulture Propriedade

Definição

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.

Aplica-se a

Ver também