CultureInfo.DefaultThreadCurrentUICulture Właściwość

Definicja

Pobiera lub ustawia domyślną kulturę interfejsu użytkownika dla wątków w bieżącej domenie aplikacji.

C#
public static System.Globalization.CultureInfo DefaultThreadCurrentUICulture { get; set; }
C#
public static System.Globalization.CultureInfo? DefaultThreadCurrentUICulture { get; set; }

Wartość właściwości

Domyślna kultura interfejsu użytkownika wątków w bieżącej domenie aplikacji lub null jeśli bieżąca kultura interfejsu użytkownika systemu jest domyślną kulturą interfejsu użytkownika wątku w domenie aplikacji.

Wyjątki

W operacji zestawu wartość właściwości jest nieprawidłowa Name .

Przykłady

Poniższy przykład ilustruje domyślne zachowanie .NET Framework podczas definiowania bieżącej kultury nowego wątku. Używa on zasobów języka angielskiego i rosyjskiego. Następujący plik tekstowy o nazwie GreetingStrings.txt zawiera zasoby języka angielskiego:

greeting =Hello again!
newGreeting=Hello!

Jest on kompilowany do binarnego pliku resources o nazwie GreetingStrings.resources przy użyciu generatora plików zasobów za pomocą następującego polecenia.

Console
resgen greetingstrings.txt

Następujący plik tekstowy o nazwie GreetingStrings.ru-RU.txt zawiera zasoby języka rosyjskiego:

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

Jest on kompilowany do binarnego pliku resources o nazwie GreetingStrings.ru-RU.resources przy użyciu generatora plików zasobów za pomocą następującego polecenia.

Console
resgen greetingstrings.ru-RU.txt

Kod aplikacji, który jest pokazany poniżej, znajduje się w pliku o nazwie Example1.vb lub Example1.cs. Jest on kompilowany do pliku wykonywalnego przy użyciu następującego polecenia dla kompilatora Visual Basic:

Console
vbc Example1.vb /resource:GreetingStrings.resources

W przypadku kompilatora języka C# polecenie jest podobne:

Console
csc /resource:GreetingStrings.resources Example1.cs

Spowoduje to utworzenie zestawu zawierającego kod wykonywalny przykładu wraz z zasobami dla jego kultury rezerwowej. Możesz również użyć konsolidatora zestawów , aby utworzyć plik zasobów dla kultury rosyjskiej (Rosji) za pomocą następującego polecenia:

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

Podczas uruchamiania przykład ustawia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na rosyjską (Rosję) we wszystkich systemach, z wyjątkiem tych, w których domyślna kultura systemowa jest już rosyjska (Rosja). Jeśli domyślna kultura systemowa jest już rosyjska (Rosja), kod ustawia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na angielski (Stany Zjednoczone). Następnie wywołuje procedurę ShowGreeting , która wyświetla prosty ciąg przy pierwszym wywołaniu i nieco inny ciąg w kolejnych wywołaniach metody. Następnie tworzy nowy wątek, który również wykonuje procedurę ShowGreeting .

C#
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!

Jak pokazuje dane wyjściowe z przykładu, gdy przykład jest uruchamiany na komputerze, którego kultura systemowa jest angielska (Stany Zjednoczone), główny wątek wyświetla jego początkowy ciąg w języku rosyjskim. Jednak ponieważ kultura wątku roboczego pochodzi z bieżącej kultury systemu Windows, a nie bieżącej kultury aplikacji, wątek procesu roboczego wyświetla ciąg w języku angielskim.

W poniższym przykładzie użyto DefaultThreadCurrentCulture właściwości i DefaultThreadCurrentUICulture do zdefiniowania bieżącej kultury i bieżącej kultury interfejsu użytkownika nowego wątku aplikacji.

W przykładzie użyto tych samych plików zasobów co w poprzednim przykładzie. Polecenia kompilowania i osadzania zlokalizowanych zasobów języka rosyjskiego w zestawie satelitarnym są również identyczne, z tą różnicą, że nazwa zestawu wykonywalnego zmienia się.

Podczas uruchamiania przykład ustawia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na rosyjską (Rosję) we wszystkich systemach, z wyjątkiem tych, w których domyślna kultura systemowa jest już rosyjska (Rosja). Jeśli domyślna kultura systemowa jest już rosyjska (Rosja), ustawia bieżącą kulturę i bieżącą kulturę interfejsu użytkownika na angielski (Stany Zjednoczone). Następnie wywołuje procedurę ShowGreeting , która wyświetla prosty ciąg przy pierwszym wywołaniu i nieco inny ciąg w kolejnych wywołaniach metody. Następnie tworzy nowy wątek, który również wykonuje procedurę ShowGreeting .

C#
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:
//       Привет!
//       Еще раз привет!

Jak pokazuje dane wyjściowe z przykładu, gdy przykład jest uruchamiany na komputerze, na którym kultura systemowa jest angielska (Stany Zjednoczone), zarówno główny wątek, jak i wątek roboczy wyświetlają ciągi w języku rosyjskim.

Uwagi

W .NET Framework 4 i poprzednich wersjach domyślnie kultura interfejsu użytkownika wszystkich wątków jest ustawiona na kulturę systemu Windows. W przypadku aplikacji, których bieżąca kultura interfejsu użytkownika różni się od domyślnej kultury systemu, to zachowanie jest często niepożądane. W .NET Framework 4.5 DefaultThreadCurrentUICulture właściwość umożliwia zdefiniowanie domyślnej kultury interfejsu użytkownika wszystkich wątków w domenie aplikacji.

Ważne

Jeśli nie ustawiono jawnie kultury interfejsu użytkownika istniejących wątków wykonywanych w domenie aplikacji, ustawienie DefaultThreadCurrentUICulture właściwości zmienia również kulturę tych wątków. Jeśli jednak te wątki są wykonywane w innej domenie aplikacji, ich kultura jest definiowana przez DefaultThreadCurrentUICulture właściwość w tej domenie aplikacji lub, jeśli nie zdefiniowano wartości domyślnej, domyślnie jest to kultura systemowa. W związku z tym zalecamy, aby zawsze jawnie ustawić kulturę głównego wątku aplikacji i nie polegać na DefaultThreadCurrentUICulture właściwości w celu zdefiniowania kultury głównego wątku aplikacji.

Jeśli nie zostanie ona ustawiona jawnie, wartość DefaultThreadCurrentUICulture właściwości to null, a bieżąca kultura wszystkich wątków w domenie aplikacji, która nie została przypisana, jest definiowana przez domyślną kulturę systemu Windows.

Aby uzyskać więcej informacji na temat kultur, wątków i domen aplikacji, zobacz sekcje "Kultura i wątki" i "Domeny kultury i aplikacji" na stronie referencyjnej CultureInfo .

Dotyczy

Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Zobacz też