CultureInfo.DefaultThreadCurrentUICulture Eigenschaft

Definition

Ruft die standardmäßige Benutzeroberflächenkultur für Threads in der aktuellen Anwendungsdomäne ab oder legt diese fest.

public:
 static property System::Globalization::CultureInfo ^ DefaultThreadCurrentUICulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public static System.Globalization.CultureInfo DefaultThreadCurrentUICulture { get; set; }
public static System.Globalization.CultureInfo? DefaultThreadCurrentUICulture { get; set; }
member this.DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo

Eigenschaftswert

CultureInfo

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

Ausnahmen

Bei einem SET-Vorgang ist der Eigenschaftswert Name ungültig.

Beispiele

Das folgende Beispiel veranschaulicht das Standardverhalten der .NET Framework beim Definieren der aktuellen Kultur eines neuen Threads. Es werden Ressourcen für Englisch und Russisch verwendet. Die folgende Textdatei namens GreetingStrings.txt die Ressourcen in englischer Sprache:

greeting =Hello again!
newGreeting=Hello!

Sie wird mithilfe des Ressourcendatei-Generators mit dem folgenden Befehl in eine binäre RESOURCES-Datei namens GreetingStrings.resources kompiliert.

resgen greetingstrings.txt

Die folgende Textdatei mit dem Namen GreetingStrings.ru-RU.txt die Ressourcen in der Sprache Russisch:

greeting=Еще раз привет!
newGreeting=Привет!

Sie wird in eine binäre RESOURCES-Datei namens GreetingStrings.ru-RU.resources kompiliert, indem der Ressourcendatei-Generator mit dem folgenden Befehl verwendet wird.

resgen greetingstrings.ru-RU.txt

Der Unten dargestellte Anwendungscode befindet sich in einer Datei mit dem Namen Example1.vb oder Example1.cs. Sie wird mithilfe des folgenden Befehls für den Visual Basic kompiliert:

vbc Example1.vb /resource:GreetingStrings.resources

Für den C#-Compiler sieht der Befehl ähnlich aus:

csc /resource:GreetingStrings.resources Example1.cs

Dadurch wird eine Assembly erstellt, die den ausführbaren Code des Beispiels zusammen mit den Ressourcen für seine Fallbackkultur enthält. Sie können auch den Assembly Linker verwenden, um die Ressourcendatei für die Kultur Russisch (Russisch) mit dem folgenden Befehl zu erstellen:

>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll

Beim Start legt das Beispiel die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf allen Systemen auf Russisch (Russisch) fest, mit Ausnahme der Systeme, auf denen die Standardsystemkultur bereits Russisch (Russisch) ist. Wenn die Standardsystemkultur bereits Russisch (Russisch) ist, legt der Code die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA. Anschließend wird die -Routine aufgerufen, die beim ersten Aufruf eine einfache Zeichenfolge und bei nachfolgenden Methodenaufrufen eine etwas andere ShowGreeting Zeichenfolge anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die -Routine ShowGreeting ausricht.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings",
                               typeof(Example).Assembly);

      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);
   }
}
// The example displays the following output:
//       Привет!
//       Hello again!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Hello again!

Wie die Ausgabe des Beispiels zeigt, zeigt der Hauptthread seine ursprüngliche Zeichenfolge in Russisch an, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur Englisch (USA) ist. Da die Kultur des Arbeitsthreads jedoch von der aktuellen Windows-Systemkultur und nicht von der aktuellen Kultur der Anwendung abgeleitet ist, zeigt der Arbeitsthread seine Zeichenfolge auf Englisch an.

Im folgenden Beispiel werden die Eigenschaften und verwendet, um die aktuelle Kultur und die aktuelle DefaultThreadCurrentCulture DefaultThreadCurrentUICulture Benutzeroberflächenkultur eines neuen Anwendungsthreads zu definieren.

Im Beispiel werden die gleichen Ressourcendateien wie im vorherigen Beispiel verwendet. Die Befehle zum Kompilieren und Einbetten der lokalisierten Russisch-Sprachressourcen in eine Satelliten-Assembly sind ebenfalls identisch, mit der Ausnahme, dass sich der Name der ausführbaren Assembly ändert.

Beim Start legt das Beispiel die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf allen Systemen auf Russisch (Russisch) fest, mit Ausnahme der Systeme, auf denen die Standardsystemkultur bereits Russisch (Russisch) ist. Wenn die Standardsystemkultur bereits Russisch (Russisch) ist, wird die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA. Anschließend wird die -Routine aufgerufen, die beim ersten Aufruf eine einfache Zeichenfolge und bei nachfolgenden Methodenaufrufen eine etwas andere ShowGreeting Zeichenfolge anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die -Routine ShowGreeting ausricht.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings",
                               typeof(Example).Assembly);

      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      CultureInfo.DefaultThreadCurrentCulture = culture;
      CultureInfo.DefaultThreadCurrentUICulture = culture;

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);
   }
}
// The example displays the following output:
//       Привет!
//       Еще раз привет!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      CultureInfo.DefaultThreadCurrentCulture = culture
      CultureInfo.DefaultThreadCurrentUICulture = culture
       
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Еще раз привет!

Wie die Ausgabe des Beispiels zeigt, zeigen sowohl der Hauptthread als auch der Arbeitsthread ihre Zeichenfolgen in der Sprache Russisch an, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur Englisch (USA) ist.

Hinweise

In der .NET Framework 4 und früheren Versionen wird die Benutzeroberflächenkultur aller Threads standardmäßig auf die Windows festgelegt. Bei Anwendungen, deren aktuelle Benutzeroberflächenkultur sich von der Standardsystemkultur unterscheidet, ist dieses Verhalten häufig unerwünscht. In der .NET Framework 4.5 können Sie mit der -Eigenschaft die Standardkultur der Benutzeroberfläche aller Threads DefaultThreadCurrentUICulture in einer Anwendungsdomäne definieren.

Wichtig

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

Sofern nicht explizit festgelegt, ist der Wert der -Eigenschaft , und die aktuelle Kultur aller Threads in einer Anwendungsdomäne, denen keine explizite Kultur zugewiesen wurde, wird durch die standarddefinierte Windows DefaultThreadCurrentUICulture null definiert.

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

Gilt für

Siehe auch