CultureInfo.DefaultThreadCurrentCulture Właściwość

Definicja

Pobiera lub ustawia domyślną kulturę wątków w bieżącej domenie aplikacji.

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

Wartość właściwości

Domyślna kultura wątków w bieżącej domenie aplikacji lub null jeśli bieżąca kultura systemowa jest domyślną kulturą wątku w domenie aplikacji.

Przykłady

Poniższy przykład ilustruje domyślne zachowanie .NET Framework podczas definiowania bieżącej kultury nowego wątku. Podczas uruchamiania przykład ustawia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na francuski (Francja) we wszystkich systemach, z wyjątkiem tych, w których domyślna kultura systemowa jest już francuska (Francja). Jeśli domyślna kultura systemowa jest już francuska (Francja), kod ustawia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na angielski (Stany Zjednoczone). Następnie wywołuje procedurę DisplayRandomNumbers , która generuje trzy losowe liczby i wyświetla je jako wartości waluty. Następnie tworzy nowy wątek, który również wykonuje procedurę 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

Jak pokazuje dane wyjściowe z przykładu, gdy przykład jest uruchamiany na komputerze, którego kultura systemowa jest angielska (Stany Zjednoczone), główny wątek wyświetla wartości waluty przy użyciu konwencji formatowania kultury francuskiej (Francja). Jednak ponieważ kultura wątku roboczego pochodzi z bieżącej kultury systemu Windows, a nie bieżącej kultury aplikacji, wątek roboczy wyświetla wartości waluty przy użyciu konwencji formatowania kultury angielskiej (Stany Zjednoczone).

W poniższym przykładzie użyto DefaultThreadCurrentCulture właściwości i DefaultThreadCurrentUICulture do zdefiniowania bieżącej kultury i bieżącej kultury interfejsu użytkownika nowego wątku aplikacji. Podczas uruchamiania przykład ustawia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na francuski (Francja) we wszystkich systemach, z wyjątkiem tych, w których domyślna kultura systemowa jest już francuska (Francja). Jeśli domyślna kultura systemowa jest już francuska (Francja), ustawia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na angielski (Stany Zjednoczone). Następnie wywołuje procedurę DisplayRandomNumbers , która generuje trzy losowe liczby i wyświetla je jako wartości waluty. Następnie tworzy nowy wątek, który również wykonuje procedurę 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 €

Jak pokazuje dane wyjściowe z przykładu, gdy przykład jest uruchamiany na komputerze, którego kultura systemowa jest angielska (Stany Zjednoczone), zarówno główny wątek, jak i wątek roboczy wyświetlają swoje wartości waluty przy użyciu konwencji formatowania kultury francuskiej (Francja).

Uwagi

W .NET Framework 4 i poprzednich wersjach domyślnie kultura wszystkich wątków jest ustawiona na kulturę systemu Windows. W przypadku aplikacji, których bieżąca kultura różni się od domyślnej kultury systemu, to zachowanie jest często niepożądane. W .NET Framework 4.5 DefaultThreadCurrentCulture właściwość umożliwia aplikacji zdefiniowanie domyślnej kultury wszystkich wątków w domenie aplikacji.

Ważne

Jeśli nie ustawiono jawnie kultury istniejących wątków wykonywanych w domenie aplikacji, ustawienie DefaultThreadCurrentCulture właściwości zmienia również kulturę tych wątków. Jeśli jednak te wątki są wykonywane w innej domenie aplikacji, ich kultura jest definiowana przez DefaultThreadCurrentCulture właściwość w tej domenie aplikacji lub, jeśli nie zdefiniowano wartości domyślnej, domyślnie jest to kultura systemowa. W związku z tym zalecamy, aby zawsze jawnie ustawić kulturę głównego wątku aplikacji, a nie polegać na DefaultThreadCurrentCulture właściwości w celu zdefiniowania kultury głównego wątku aplikacji.

Jeśli nie zostanie jawnie ustawiona, wartość DefaultThreadCurrentCulture właściwości to null, a kultura wątków w domenie aplikacji, która nie została przypisana, jest definiowana przez domyślną kulturę systemu Windows.

Aby uzyskać więcej informacji na temat kultur, wątków i domen aplikacji, zobacz sekcje "Kultura i wątki" i "Domeny kultury i aplikacji" na stronie referencyjnej CultureInfo .

Dotyczy

Zobacz też