Compartir a través de


CultureInfo.DefaultThreadCurrentCulture Propiedad

Definición

Obtiene o establece la referencia cultural predeterminada para los subprocesos del dominio de aplicación actual.

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

Valor de propiedad

Referencia cultural predeterminada para los subprocesos del dominio de aplicación actual, o null si la referencia cultural actual del sistema es la referencia cultural predeterminada del subproceso en el dominio de aplicación.

Ejemplos

En el ejemplo siguiente se muestra el comportamiento predeterminado de .NET Framework en la definición de la referencia cultural actual de un nuevo subproceso. En el inicio, en el ejemplo se establece la referencia cultural actual y la referencia cultural de la interfaz de usuario actual en francés (Francia) en todos los sistemas, excepto aquellos en los que la referencia cultural predeterminada del sistema ya es francés (Francia). Si la referencia cultural predeterminada del sistema ya es francés (Francia), el código establece la referencia cultural actual y la referencia cultural de la interfaz de usuario actual en inglés (Estados Unidos). A continuación, llama a la DisplayRandomNumbers rutina , que genera tres números aleatorios y los muestra como valores de moneda. A continuación, crea un nuevo subproceso, que también ejecuta la DisplayRandomNumbers rutina.

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 se muestra en la salida del ejemplo, cuando se ejecuta el ejemplo en un equipo cuya referencia cultural del sistema es inglés (Estados Unidos), el subproceso principal muestra sus valores de moneda mediante las convenciones de formato de la referencia cultural francés (Francia). Sin embargo, dado que la referencia cultural del subproceso de trabajo se deriva de la referencia cultural actual del sistema windows en lugar de la referencia cultural actual de la aplicación, el subproceso de trabajo muestra sus valores de moneda mediante las convenciones de formato de la referencia cultural inglés (Estados Unidos).

En el ejemplo siguiente se usan las DefaultThreadCurrentCulture propiedades y DefaultThreadCurrentUICulture para definir la referencia cultural actual y la referencia cultural de la interfaz de usuario actual de un nuevo subproceso de aplicación. En el inicio, en el ejemplo se establece la referencia cultural actual y la referencia cultural de la interfaz de usuario actual en francés (Francia) en todos los sistemas, excepto aquellos en los que la referencia cultural predeterminada del sistema ya es francés (Francia). Si la referencia cultural predeterminada del sistema ya es francés (Francia), establece la referencia cultural actual y la referencia cultural de la interfaz de usuario actual en inglés (Estados Unidos). A continuación, llama a la DisplayRandomNumbers rutina , que genera tres números aleatorios y los muestra como valores de moneda. A continuación, crea un nuevo subproceso, que también ejecuta la DisplayRandomNumbers rutina.

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 se muestra en la salida del ejemplo, cuando se ejecuta el ejemplo en un equipo cuya referencia cultural del sistema es inglés (Estados Unidos), tanto el subproceso principal como el subproceso de trabajo muestran sus valores de moneda mediante las convenciones de formato de la referencia cultural francesa (Francia).

Comentarios

En .NET Framework 4 y versiones anteriores, de forma predeterminada, la referencia cultural de todos los subprocesos se establece en la referencia cultural del sistema de Windows. En el caso de las aplicaciones cuya referencia cultural actual difiere de la referencia cultural predeterminada del sistema, este comportamiento suele no ser deseable. En .NET Framework 4.5, la DefaultThreadCurrentCulture propiedad permite a una aplicación definir la referencia cultural predeterminada de todos los subprocesos de un dominio de aplicación.

Importante

Si no ha establecido explícitamente la referencia cultural de los subprocesos existentes que se ejecutan en un dominio de aplicación, al establecer la DefaultThreadCurrentCulture propiedad también se cambia la referencia cultural de estos subprocesos. Sin embargo, si estos subprocesos se ejecutan en otro dominio de aplicación, su referencia cultural se define mediante la DefaultThreadCurrentCulture propiedad de ese dominio de aplicación o, si no se define ningún valor predeterminado, mediante la referencia cultural del sistema predeterminada. Por este motivo, se recomienda establecer siempre explícitamente la referencia cultural del subproceso de aplicación principal y no confiar en la DefaultThreadCurrentCulture propiedad para definir la referencia cultural del subproceso de aplicación principal.

A menos que se establezca explícitamente, el valor de la DefaultThreadCurrentCulture propiedad es nully la referencia cultural de los subprocesos de un dominio de aplicación a los que no se ha asignado una referencia cultural explícita se define mediante la referencia cultural predeterminada del sistema de Windows.

Para obtener más información sobre las referencias culturales, los subprocesos y los dominios de aplicación, consulte las secciones "Referencia cultural y subprocesos" y "Dominios de referencia cultural y de aplicación" en la página de CultureInfo referencia.

Se aplica a

Consulte también