Question

Normalement, vous pouvez l'obtenir en écrivant quelque chose comme

CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;

Mais cette façon, vous ne pouvez obtenir CultureInfo qui a été configuré à l'application moment a été lancé et ne sera pas mise à jour si le réglage a été modifié par la suite.

Alors, comment obtenir CultureInfo actuellement configuré dans le Panneau de configuration -> Paramètres régionaux et linguistiques

Était-ce utile?

La solution

ClearCachedData est la méthode à utiliser. Mais selon MSDN:

  

La méthode ClearCachedData ne   actualiser les informations contenues dans le   Thread.CurrentCulture Biens   threads existants

Vous devez d'abord appeler la fonction, puis commencer un nouveau thread. Dans ce nouveau fil, vous pouvez utiliser le CurrentCulture pour obtenir les nouvelles valeurs de la culture.

class Program
{
    private class State
    {
        public CultureInfo Result { get; set; }
    }

    static void Main(string[] args)
    {
        Thread.CurrentThread.CurrentCulture.ClearCachedData();
        var thread = new Thread(
            s => ((State)s).Result = Thread.CurrentThread.CurrentCulture);
        var state = new State();
        thread.Start(state);
        thread.Join();
        var culture = state.Result;
        // Do something with the culture
    }

}

Notez que si vous avez aussi besoin de réinitialiser CurrentUICulture, vous devriez le faire séparément

Thread.CurrentThread.CurrentUICulture.ClearCachedData()

Autres conseils

Thread.CurrentThread.CurrentCulture.ClearCachedData() ressemble Fera des données de culture à relus quand il est ensuite accessible.

Vous pouvez utiliser la fonction API Win32 GetSystemDefaultLCID. Le signiture est comme suit:

[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();

fonction GetSystemDefaultLCID renvoie le LCID. Il peut mapper chaîne de langue à partir de la table que vous avez choisi. ID de paramètres régionaux Attribuée par Microsoft

Nous avons rencontré ce problème avec notre application WinForms et il est dû à la création de Visual Studio le [MyApp] .vshost.exe processus qui est toujours en cours d'exécution en arrière-plan chaque fois que Visual Studio est ouvert.

Mise hors MyApp -> Propriétés -> Debug -.> "Activer processus d'hébergement Visual Studio" Figé ce pour nous

Le processus vshost est principalement utilisé pour améliorer le débogage, mais si vous ne voulez pas désactiver le paramètre, vous pouvez tuer le processus au besoin.

Il y a les classes CultureInfo et TextInfo de l'espace de noms System.Globalization. Les deux classes obtiennent plusieurs paramètres régionaux de Windows définis dans les panneaux de contrôle. La liste des paramètres disponibles est dans la documentation.

Par exemple:

string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator;

est d'obtenir le séparateur de liste pour le programme qui est en cours d'exécution.

[DllImport("kernel32.dll")]
private static extern int GetUserDefaultLCID();

public static CultureInfo CurrentCultureInRegionalSettings => new CultureInfo(GetUserDefaultLCID());

Essayez de trouver les paramètres que vous voulez dans SystemInformation classe ou regarder dans WMI en utilisant les classes System.Management/System.Diagnostics, vous pouvez utiliser LINQ à WMI trop

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top