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

Eigenschaftswert

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 des .NET Framework beim Definieren der aktuellen Kultur eines neuen Threads. Es werden Ressourcen der englischen und russischen Sprache verwendet. Die folgende Textdatei mit dem Namen GreetingStrings.txt enthält die englischen Sprachressourcen:

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 enthält die Ressourcen der russischen Sprache:

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

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

resgen greetingstrings.ru-RU.txt

Der unten gezeigte Anwendungscode befindet sich in einer Datei mit dem Namen Example1.vb oder Example1.cs. Es wird mit dem folgenden Befehl für den Visual Basic-Compiler in eine ausführbare Datei kompiliert:

vbc Example1.vb /resource:GreetingStrings.resources

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

csc /resource:GreetingStrings.resources Example1.cs

Dadurch wird eine Assembly erstellt, die den ausführbaren Code des Beispiels zusammen mit den Ressourcen für die Fallbackkultur enthält. Sie können auch den Assembly linker verwenden, um die Ressourcendatei für die Kultur "Russisch (Russland)" 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 (Russland) fest, mit Ausnahme der Systeme, für die die Standardsystemkultur bereits Russisch (Russland) ist. Wenn die Standardsystemkultur bereits Russisch (Russland) ist, legt der Code die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA) fest. Anschließend wird die ShowGreeting Routine aufgerufen, die beim ersten Aufruf eine einfache Zeichenfolge und eine etwas andere Zeichenfolge bei nachfolgenden Methodenaufrufen anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die ShowGreeting Routine ausführt.

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 Standard Thread, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur englisch (USA) ist, seine anfängliche Zeichenfolge auf Russisch an. Da die Kultur des Workerthreads jedoch von der aktuellen Windows-Systemkultur und nicht von der aktuellen Kultur der Anwendung abgeleitet wird, zeigt der Workerthread seine Zeichenfolge auf Englisch an.

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

Im Beispiel werden dieselben Ressourcendateien wie im vorherigen Beispiel verwendet. Die Befehle zum Kompilieren und Einbetten der lokalisierten russischen Sprachressourcen in eine Satellitenassembly 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 (Russland) fest, mit Ausnahme der Systeme, für die die Standardsystemkultur bereits Russisch (Russland) ist. Wenn die Standardsystemkultur bereits Russisch (Russland) ist, wird die aktuelle Kultur und die aktuelle Benutzeroberflächenkultur auf Englisch (USA) festgelegt. Anschließend wird die ShowGreeting Routine aufgerufen, die beim ersten Aufruf eine einfache Zeichenfolge und eine etwas andere Zeichenfolge bei nachfolgenden Methodenaufrufen anzeigt. Als Nächstes wird ein neuer Thread erstellt, der auch die ShowGreeting Routine ausführt.

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 Standard-Thread als auch der Workerthread ihre Zeichenfolgen in der russischen Sprache 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 Benutzeroberflächenkultur aller Threads standardmäßig auf die Windows-Systemkultur festgelegt. Für Anwendungen, deren aktuelle Benutzeroberflächenkultur sich von der Standardsystemkultur unterscheidet, ist dieses Verhalten häufig unerwünscht. Im .NET Framework 4.5 können Sie mit der DefaultThreadCurrentUICulture -Eigenschaft die Standardkultur der Benutzeroberfläche aller Threads in einer Anwendungsdomäne definieren.

Wichtig

Wenn Sie nicht explizit die Ui-Kultur vorhandener Threads festgelegt haben, die in einer Anwendungsdomäne ausgeführt werden, ändert das Festlegen der DefaultThreadCurrentUICulture 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 DefaultThreadCurrentUICulture Anwendungsdomäne oder, wenn kein Standardwert definiert ist, durch die Standardsystemkultur definiert. Aus diesem Grund wird empfohlen, immer explizit die Kultur Ihres Standard Anwendungsthreads festzulegen und sich nicht auf die DefaultThreadCurrentUICulture -Eigenschaft zu verlassen, um die Kultur des Standard Anwendungsthreads zu definieren.

Sofern sie nicht explizit festgelegt ist, ist nullder Wert der DefaultThreadCurrentUICulture Eigenschaft , und die aktuelle Kultur aller 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