CultureInfo.DefaultThreadCurrentUICulture Proprietà

Definizione

Ottiene o imposta le impostazioni cultura predefinite dell'interfaccia utente per i thread nel dominio dell'applicazione corrente.

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

Valore della proprietà

Impostazioni cultura dell'interfaccia utente predefinite per i thread nel dominio dell'applicazione corrente oppure null se le impostazioni cultura dell'interfaccia utente correnti del sistema sono le impostazioni cultura dell'interfaccia utente predefinite per i thread nel dominio dell'applicazione.

Eccezioni

In un'operazione set il valore della proprietà Name non è valido.

Esempio

Nell'esempio seguente viene illustrato il comportamento predefinito di .NET Framework nella definizione delle impostazioni cultura correnti di un nuovo thread. Usa le risorse di lingua inglese e russa. Il file di testo seguente denominato GreetingStrings.txt contiene le risorse della lingua inglese:

greeting =Hello again!
newGreeting=Hello!

Viene compilato in un file binario con estensione resources denominato GreetingStrings.resources usando il generatore di file di risorse con il comando seguente.

resgen greetingstrings.txt

Il file di testo seguente denominato GreetingStrings.ru-RU.txt contiene le risorse della lingua russa:

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

Viene compilato in un file binario con estensione resources denominato GreetingStrings.ru-RU.resources usando il generatore di file di risorse con il comando seguente.

resgen greetingstrings.ru-RU.txt

Il codice dell'applicazione, illustrato di seguito, risiede in un file denominato Example1.vb o Example1.cs. Viene compilato in un eseguibile usando il comando seguente per il compilatore Visual Basic:

vbc Example1.vb /resource:GreetingStrings.resources

Per il compilatore C#, il comando è simile:

csc /resource:GreetingStrings.resources Example1.cs

In questo modo viene creato un assembly che include il codice eseguibile dell'esempio insieme alle risorse per le impostazioni cultura di fallback. È anche possibile usare Assembly Linker per creare il file di risorse per le impostazioni cultura russo (Russia) con il comando seguente:

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

All'avvio, l'esempio imposta le impostazioni cultura correnti e le impostazioni cultura dell'interfaccia utente correnti su russo (Russia) su tutti i sistemi, ad eccezione di quelli in cui le impostazioni cultura predefinite del sistema sono già russe (Russia). Se le impostazioni cultura di sistema predefinite sono già russe (Russia), il codice imposta le impostazioni cultura correnti e le impostazioni cultura dell'interfaccia utente correnti su inglese (Stati Uniti). Chiama quindi la ShowGreeting routine, che visualizza una stringa semplice la prima volta che viene chiamata e una stringa leggermente diversa nelle chiamate di metodo successive. Successivamente, crea un nuovo thread, che esegue anche la ShowGreeting routine.

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!

Come illustrato dall'esempio, quando l'esempio viene eseguito in un computer la cui cultura di sistema è inglese (Stati Uniti), il thread principale visualizza la stringa iniziale in russo. Tuttavia, poiché le impostazioni cultura del thread di lavoro sono derivate dalle impostazioni cultura di sistema di Windows correnti anziché dalle impostazioni cultura correnti dell'applicazione, il thread di lavoro visualizza la stringa in inglese.

Nell'esempio seguente vengono usate le DefaultThreadCurrentCulture proprietà e DefaultThreadCurrentUICulture per definire le impostazioni cultura correnti e le impostazioni cultura correnti dell'interfaccia utente di un nuovo thread dell'applicazione.

Nell'esempio vengono usati gli stessi file di risorse dell'esempio precedente. I comandi da compilare e per incorporare le risorse di lingua russa localizzate in un assembly satellite sono anche identici, ad eccezione del fatto che il nome dell'assembly eseguibile cambia.

All'avvio, l'esempio imposta le impostazioni cultura correnti e le impostazioni cultura dell'interfaccia utente correnti su russo (Russia) su tutti i sistemi, ad eccezione di quelli in cui le impostazioni cultura predefinite del sistema sono già russe (Russia). Se le impostazioni cultura di sistema predefinite sono già russe (Russia), imposta le impostazioni cultura correnti e le impostazioni cultura dell'interfaccia utente correnti su inglese (Stati Uniti). Chiama quindi la ShowGreeting routine, che visualizza una stringa semplice la prima volta che viene chiamata e una stringa leggermente diversa nelle chiamate di metodo successive. Successivamente, crea un nuovo thread, che esegue anche la ShowGreeting routine.

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

Come illustrato nell'output dell'esempio, quando l'esempio viene eseguito in un computer le cui impostazioni cultura di sistema sono inglese (Stati Uniti), sia il thread principale che il thread di lavoro visualizzano le stringhe nella lingua russa.

Commenti

Nelle versioni precedenti e .NET Framework 4, per impostazione predefinita, le impostazioni cultura dell'interfaccia utente di tutti i thread sono impostate sulle impostazioni cultura del sistema Windows. Per le applicazioni le cui impostazioni cultura dell'interfaccia utente correnti differiscono dalle impostazioni cultura predefinite del sistema, questo comportamento è spesso indesiderato. In .NET Framework 4.5 la DefaultThreadCurrentUICulture proprietà consente di definire le impostazioni cultura dell'interfaccia utente predefinite di tutti i thread in un dominio dell'applicazione.

Importante

Se non è stata impostata in modo esplicito le impostazioni cultura dell'interfaccia utente di qualsiasi thread esistente in esecuzione in un dominio dell'applicazione, l'impostazione della DefaultThreadCurrentUICulture proprietà modifica anche le impostazioni cultura di questi thread. Tuttavia, se questi thread vengono eseguiti in un altro dominio applicazione, le DefaultThreadCurrentUICulture impostazioni cultura sono definite dalla proprietà nel dominio dell'applicazione o, se non viene definito alcun valore predefinito, dalle impostazioni cultura di sistema predefinite. A causa di questo, è consigliabile impostare sempre in modo esplicito le impostazioni cultura del thread dell'applicazione principale e non basarsi DefaultThreadCurrentUICulture sulla proprietà per definire le impostazioni cultura del thread dell'applicazione principale.

A meno che non sia impostato in modo esplicito, il valore della DefaultThreadCurrentUICulture proprietà è nulle le impostazioni cultura correnti di tutti i thread in un dominio applicazione che non sono state assegnate impostazioni cultura esplicite sono definite dalle impostazioni cultura predefinite del sistema Windows.

Per altre informazioni sulle impostazioni cultura, thread e domini applicazione, vedere le sezioni "Impostazioni cultura e thread" e "Domini cultura e applicazioni" nella CultureInfo pagina di riferimento.

Si applica a

Vedi anche