CultureInfo.DefaultThreadCurrentUICulture Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar eller anger standardgränssnittskulturen för trådar i den aktuella programdomänen.
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; }
static member DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo
Egenskapsvärde
Standardgränssnittskulturen för trådar i den aktuella programdomänen, eller null om den aktuella systemgränssnittskulturen är standardtrådens användargränssnittskultur i programdomänen.
Undantag
I en uppsättningsåtgärd är egenskapsvärdet Name ogiltigt.
Exempel
I följande exempel visas standardbeteendet för .NET när du definierar den aktuella kulturen i en ny tråd. Den använder engelska och ryska språkresurser. Följande textfil med namnet GreetingStrings.txt innehåller de engelska språkresurserna:
greeting =Hello again!
newGreeting=Hello!
Den kompileras till en binär .resources-fil med namnet GreetingStrings.resources med hjälp av resursfilgeneratorn med följande kommando.
resgen greetingstrings.txt
Följande textfil med namnet GreetingStrings.ru-RU.txt innehåller de ryska språkresurserna:
greeting=Еще раз привет!
newGreeting=Привет!
Den kompileras till en binär .resources-fil med namnet GreetingStrings.ru-RU.resources med hjälp av resursfilgeneratorn med följande kommando.
resgen greetingstrings.ru-RU.txt
Programkoden, som visas nedan, finns i en fil med namnet Example1.vb eller Example1.cs. Den kompileras till en körbar fil med hjälp av följande kommando för Visual Basic kompilatorn:
vbc Example1.vb /resource:GreetingStrings.resources
För C#-kompilatorn liknar kommandot:
csc /resource:GreetingStrings.resources Example1.cs
Detta skapar en sammansättning som innehåller exemplets körbara kod tillsammans med resurserna för dess återställningskultur. Du kan också använda Assembly Linker för att skapa resursfilen för den ryska kulturen (Ryssland) med följande kommando:
>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll
Vid start anger exemplet den aktuella kulturen och den nuvarande användargränssnittskulturen till ryska (Ryssland) på alla system utom de där standardsystemkulturen redan är rysk (Ryssland). Om standardsystemkulturen redan är rysk (Ryssland) anger koden den aktuella kulturen och den aktuella användargränssnittskulturen till engelska (United States). Den anropar sedan rutinen ShowGreeting , som visar en enkel sträng första gången den anropas och en något annorlunda sträng vid efterföljande metodanrop. Därefter skapas en ny tråd som även kör rutinen 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!
Som utdata från exemplet visar, när exemplet körs på en dator vars systemkultur är engelska (United States), visar huvudtråden sin inledande sträng på ryska. Men eftersom arbetstrådens kultur härleds från den aktuella Windows systemkulturen i stället för programmets aktuella kultur, visar arbetstråden sin sträng på engelska.
I följande exempel används DefaultThreadCurrentCulture egenskaperna och DefaultThreadCurrentUICulture för att definiera den aktuella kulturen och den aktuella användargränssnittskulturen i en ny programtråd.
I exemplet används samma resursfiler som i föregående exempel. Kommandona för att kompilera och bädda in de lokaliserade ryska språkresurserna i en satellitsammansättning är också identiska, förutom att namnet på den körbara sammansättningen ändras.
Vid start anger exemplet den aktuella kulturen och den nuvarande användargränssnittskulturen till ryska (Ryssland) på alla system utom de där standardsystemkulturen redan är rysk (Ryssland). Om standardsystemkulturen redan är rysk (Ryssland) ställer den in den aktuella kulturen och den nuvarande UI-kulturen på engelska (United States). Den anropar sedan rutinen ShowGreeting , som visar en enkel sträng första gången den anropas och en något annorlunda sträng vid efterföljande metodanrop. Därefter skapas en ny tråd som även kör rutinen 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:
' Привет!
' Еще раз привет!
Som utdata från exemplet visar, när exemplet körs på en dator vars systemkultur är engelska (United States), visar både huvudtråden och arbetstråden sina strängar på det ryska språket.
Kommentarer
I .NET Framework 4 och tidigare versioner är användargränssnittskulturen för alla trådar som standard inställd på Windows systemkultur. För program vars aktuella användargränssnittskultur skiljer sig från standardsystemkulturen är det här beteendet ofta oönskat. I .NET Framework 4.5+ kan du med egenskapen DefaultThreadCurrentUICulture definiera standardgränssnittskulturen för alla trådar i en programdomän.
Important
Om du inte uttryckligen har angett användargränssnittskulturen för befintliga trådar som körs i en programdomän ändrar inställningen DefaultThreadCurrentUICulture av egenskapen även kulturen i dessa trådar. Men om dessa trådar körs i en annan programdomän definieras deras kultur av DefaultThreadCurrentUICulture egenskapen i den programdomänen eller, om inget standardvärde har definierats, av standardsystemkulturen. Därför rekommenderar vi att du alltid uttryckligen anger kulturen för huvudprogramtråden DefaultThreadCurrentUICulture och inte förlitar dig på egenskapen för att definiera kulturen i huvudprogramtråden.
Om den inte anges explicit är värdet för egenskapen DefaultThreadCurrentUICulturenull, och den aktuella kulturen för alla trådar i en programdomän som inte har tilldelats en explicit kultur definieras som standard Windows systemkultur.
Mer information om kulturer, trådar och programdomäner finns i avsnitten CultureInfo"Kultur och trådar" och "Kultur- och programdomäner" i .