CultureInfo.DefaultThreadCurrentUICulture Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia domyślną kulturę interfejsu użytkownika dla wątków w bieżącej domenie aplikacji.
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
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.
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.
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:
vbc Example1.vb /resource:GreetingStrings.resources
W przypadku kompilatora języka C# polecenie jest podobne:
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:
>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
.
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!
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
.
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:
' Привет!
' Еще раз привет!
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 .