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; }
member this.DefaultThreadCurrentCulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentCulture As CultureInfo

Eigenschaftswert

CultureInfo

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 der .NET Framework veranschaulicht, um die aktuelle Kultur eines neuen Threads zu definieren. Beim Start legt das Beispiel die aktuelle Kultur und die aktuelle UI-Kultur auf Französisch (Frankreich) auf allen Systemen fest, außer denen, 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 UI-Kultur auf Englisch (USA) fest. Anschließend wird die DisplayRandomNumbers Routine aufgerufen, die drei Zufallszahlen generiert und als Währungswerte angezeigt wird. Als Nächstes erstellt er einen neuen Thread, 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 aus dem Beispiel zeigt, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur Englisch (USA) ist, zeigt der Hauptthread seine Währungswerte mithilfe der Formatierungskonventionen der französischen (Frankreich)-Kultur an. Da die Kultur des Arbeitsthreads jedoch aus der aktuellen Windows Systemkultur statt der aktuellen Kultur der Anwendung abgeleitet wird, zeigt der Arbeitsthread seine Währungswerte mithilfe der Formatierungskonventionen der englischen (USA)-Kultur an.

Im folgenden Beispiel werden die und die DefaultThreadCurrentCulture DefaultThreadCurrentUICulture Eigenschaften 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 UI-Kultur auf Französisch (Frankreich) auf allen Systemen fest, außer denen, auf denen die Standardsystemkultur bereits französisch (Frankreich) ist. Wenn die Standardsystemkultur bereits französisch (Frankreich) ist, legt sie die aktuelle Kultur und die aktuelle UI-Kultur auf Englisch (USA). Anschließend wird die DisplayRandomNumbers Routine aufgerufen, die drei Zufallszahlen generiert und als Währungswerte angezeigt wird. Als Nächstes erstellt er einen neuen Thread, 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 aus dem Beispiel zeigt, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur Englisch (USA) ist, zeigen sowohl der Hauptthread als auch der Arbeitsthread ihre Währungswerte mithilfe der Formatierungskonventionen der französischen (Frankreich)-Kultur an.

Hinweise

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

Wichtig

Wenn Sie die Kultur aller vorhandenen Threads, die in einer Anwendungsdomäne ausgeführt werden, nicht explizit festlegen, ä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 Anwendungsdomäne definiert oder, wenn kein Standardwert definiert ist, durch die DefaultThreadCurrentCulture Standardsystemkultur. Aus diesem Grund wird empfohlen, dass Sie die Kultur Ihres Hauptanwendungsthreads immer explizit festlegen und nicht auf die DefaultThreadCurrentCulture Eigenschaft angewiesen sind, um die Kultur des Hauptanwendungsthreads zu definieren.

Es sei denn, es wird explizit festgelegt, der Wert der DefaultThreadCurrentCulture Eigenschaftnull, und die Kultur von Threads in einer Anwendungsdomäne, die keine explizite Kultur zugewiesen wurde, wird standardmäßig Windows Systemkultur 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:

Siehe auch