CultureInfo.DefaultThreadCurrentCulture Eigenschaft

Definition

Ruft die Standardkultur für Threads in der aktuellen Anwendungsdomäne ab oder legt diese fest.

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

Eigenschaftswert

Die Standardkultur für Threads in der aktuellen Anwendungsdomäne oder null, wenn die aktuelle Systemkultur die standardmäßige Threadkultur in der Anwendungsdomäne ist.

Beispiele

Im folgenden Beispiel wird das Standardverhalten des .NET Framework beim Definieren der aktuellen Kultur eines neuen Threads veranschaulicht. Beim Start legt das Beispiel die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf französisch (Frankreich) auf allen Systemen fest, mit Ausnahme der Systeme, auf denen die Standardsystemkultur bereits Französisch (Frankreich) ist. Wenn die Standardsystemkultur bereits Französisch (Frankreich) ist, legt der Code die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA) fest. Anschließend wird die DisplayRandomNumbers Routine aufgerufen, die drei Zufallszahlen generiert und als Währungswerte anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die DisplayRandomNumbers Routine ausführt.

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

Wie die Ausgabe des Beispiels zeigt, zeigt der Hauptthread, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur englisch (USA) ist, seine Währungswerte unter Verwendung der Formatierungskonventionen der französischen Kultur (Frankreich). Da die Kultur des Workerthreads jedoch von der aktuellen Windows-Systemkultur und nicht von der aktuellen Kultur der Anwendung abgeleitet wird, zeigt der Arbeitsthread seine Währungswerte mithilfe der Formatierungskonventionen der englischen Kultur (USA) an.

Im folgenden Beispiel werden die DefaultThreadCurrentCulture Eigenschaften und DefaultThreadCurrentUICulture verwendet, um die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur eines neuen Anwendungsthreads zu definieren. Beim Start legt das Beispiel die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf französisch (Frankreich) auf allen Systemen fest, mit Ausnahme der Systeme, auf denen die Standardsystemkultur bereits Französisch (Frankreich) ist. Wenn die Standardsystemkultur bereits Französisch (Frankreich) ist, wird die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA) festgelegt. Anschließend wird die DisplayRandomNumbers Routine aufgerufen, die drei Zufallszahlen generiert und als Währungswerte anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die DisplayRandomNumbers Routine ausführt.

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 €

Wie die Ausgabe des Beispiels zeigt, zeigen sowohl der Hauptthread als auch der Arbeitsthread ihre Währungswerte unter Verwendung der Formatierungskonventionen der französischen Kultur (Frankreich) an, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur englisch (USA) ist.

Hinweise

In den .NET Framework 4 und früheren Versionen ist die Kultur aller Threads standardmäßig auf die Windows-Systemkultur festgelegt. Bei Anwendungen, deren aktuelle Kultur sich von der Standardsystemkultur unterscheidet, ist dieses Verhalten häufig unerwünscht. Im .NET Framework 4.5 ermöglicht die DefaultThreadCurrentCulture -Eigenschaft einer Anwendung, die Standardkultur aller Threads in einer Anwendungsdomäne zu definieren.

Wichtig

Wenn Sie die Kultur vorhandener Threads, die in einer Anwendungsdomäne ausgeführt werden, nicht explizit festgelegt haben, ändert das Festlegen der DefaultThreadCurrentCulture -Eigenschaft auch die Kultur dieser Threads. Wenn diese Threads jedoch in einer anderen Anwendungsdomäne ausgeführt werden, wird ihre Kultur durch die -Eigenschaft in dieser DefaultThreadCurrentCulture Anwendungsdomäne oder, wenn kein Standardwert definiert ist, durch die Standardsystemkultur definiert. Aus diesem Grund wird empfohlen, die Kultur Ihres Hauptanwendungsthreads immer explizit festzulegen und sich nicht auf die DefaultThreadCurrentCulture -Eigenschaft zu verlassen, um die Kultur des Hauptanwendungsthreads zu definieren.

Sofern sie nicht explizit festgelegt ist, ist nullder Wert der DefaultThreadCurrentCulture Eigenschaft , und die Kultur von Threads in einer Anwendungsdomäne, denen keine explizite Kultur zugewiesen wurde, wird durch die Windows-Standardsystemkultur definiert.

Weitere Informationen zu Kulturen, Threads und Anwendungsdomänen finden Sie in den Abschnitten "Kultur und Threads" und "Kultur und Anwendungsdomänen" auf der CultureInfo Referenzseite.

Gilt für:

Weitere Informationen