Freigeben über


CultureInfo.DefaultThreadCurrentUICulture Eigenschaft

Definition

Dient zum Abrufen oder Festlegen der Standard-UI-Kultur für Threads in der aktuellen Anwendungsdomäne.

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 Standard-UI-Kultur für Threads in der aktuellen Anwendungsdomäne oder null wenn die aktuelle System-UI-Kultur die Standardmäßige Thread-UI-Kultur in der Anwendungsdomäne ist.

Ausnahmen

In einem Satzvorgang ist der Name Eigenschaftswert ungültig.

Beispiele

Das folgende Beispiel veranschaulicht das Standardverhalten von .NET beim Definieren der aktuellen Kultur eines neuen Threads. Es verwendet Ressourcen für Englisch und Russisch. Die folgende Textdatei mit dem Namen GreetingStrings.txt enthält die Englisch-Sprachressourcen:

greeting =Hello again!
newGreeting=Hello!

Sie wird mithilfe des Ressourcendatei-Generators mit dem folgenden Befehl zu einer binär.resources-Datei namens GreetingStrings.resources kompiliert.

resgen greetingstrings.txt

Die folgende Textdatei namens GreetingStrings.ru-RU.txt enthält die russischen Sprachressourcen:

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

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

resgen greetingstrings.ru-RU.txt

Der unten gezeigte 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-Compiler zu einer ausführbaren 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 den Assemblylinker auch verwenden, um die Ressourcendatei für die russische Kultur (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 UI-Kultur auf Russisch (Russland) auf allen Systemen fest, mit Ausnahme derjenigen, auf denen die Standardsystemkultur bereits Russisch (Russland) ist. Wenn die Standardsystemkultur bereits Russisch (Russland) ist, legt der Code die aktuelle Kultur und die aktuelle UI-Kultur auf Englisch (USA) fest. Anschließend wird die ShowGreeting Routine aufgerufen, die eine einfache Zeichenfolge anzeigt, wenn sie zum ersten Mal aufgerufen wird, und eine geringfügig andere Zeichenfolge für nachfolgende Methodenaufrufe. 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 aus dem Beispiel zeigt, zeigt das Beispiel, wenn das Beispiel auf einem Computer ausgeführt wird, dessen Systemkultur Englisch (USA) ist, zeigt der Hauptthread seine ursprüngliche Zeichenfolge in 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 in Englisch an.

Im folgenden Beispiel werden die DefaultThreadCurrentCulture aktuelle DefaultThreadCurrentUICulture Kultur und die aktuelle Benutzeroberflächenkultur eines neuen Anwendungsthreads definiert.

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, außer dass sich der Name der ausführbaren Assembly ändert.

Beim Start legt das Beispiel die aktuelle Kultur und die aktuelle UI-Kultur auf Russisch (Russland) auf allen Systemen fest, mit Ausnahme derjenigen, auf denen die Standardsystemkultur bereits Russisch (Russland) ist. Wenn die Standardsystemkultur bereits Russisch (Russland) ist, wird die aktuelle Kultur und die aktuelle UI-Kultur auf Englisch (USA) festgelegt. Anschließend wird die ShowGreeting Routine aufgerufen, die eine einfache Zeichenfolge anzeigt, wenn sie zum ersten Mal aufgerufen wird, und eine geringfügig andere Zeichenfolge für nachfolgende Methodenaufrufe. 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 aus dem Beispiel zeigt, werden beim Ausführen des Beispiels auf einem Computer, dessen Systemkultur Englisch (USA) ist, sowohl der Hauptthread als auch der Workerthread ihre Zeichenfolgen in der russischen Sprache angezeigt.

Hinweise

In .NET Framework 4 und früheren Versionen ist standardmäßig die Benutzeroberflächenkultur aller Threads auf die Windows-Systemkultur festgelegt. Für Anwendungen, deren aktuelle Benutzeroberflächenkultur sich von der Standardsystemkultur unterscheidet, ist dieses Verhalten häufig nicht erwünscht. In .NET Framework 4.5+ können Sie mit der DefaultThreadCurrentUICulture Eigenschaft die Standard-UI-Kultur aller Threads in einer Anwendungsdomäne definieren.

Von Bedeutung

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

Sofern sie nicht explizit festgelegt ist, lautet nullder Wert der DefaultThreadCurrentUICulture Eigenschaft , und die aktuelle Kultur aller Threads in einer Anwendungsdomäne, denen keine explizite Kultur zugewiesen wurde, wird durch die Standardmäßige Windows-Systemkultur definiert.

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

Gilt für:

Weitere Informationen