2013-08-23 3 views
3

J'ai une situation intéressante où les paramètres régionaux ont joué avec mon application C#, parce que je n'ai pas réalisé que des méthodes comme Double.Parse ne convertiront pas "1000" à 1000, mais faire quelque chose d'inattendu en raison du format de numérotation différent.Modification des paramètres régionaux d'une application sans modifier les paramètres régionaux Windows

Une solution à mon problème serait d'utiliser quelque chose comme double d = double.parse("1000", new CultureInfo("en-US"));. Actuellement, je ne passe pas le CultureInfo. Cependant, au lieu d'avoir à faire ce changement dans le code, je me demandais s'il est possible d'affecter les paramètres régionaux de juste mon application au démarrage.

J'ai trouvé un article on MSDN qui dit que je peux y parvenir avec le code suivant:

using System.Threading; 
using System.Globalization; 
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 

Mais il ne dit pas si les threads de travail donné naissance du thread principal héritera également la culture du parent.

Je suppose que ce n'est pas le cas, comme dans 4,5 .NET il y a apparemment une nouvelle CultureInfo.DefaultThreadCurrentCulture propriété qui spécifie la culture pour tous les threads dans le domaine de l'application, mais il n'y a rien comme ça dans .NET 4.0 .

Quelqu'un peut-il recommander une bonne solution pour ce problème de paramètres régionaux?

Répondre

0

J'ai fini par essayer tout simplement. Dans .NET 4.0, les nouveaux threads et non héritent des paramètres régionaux du thread à partir duquel ils ont été créés. J'ai mis CurrentCulture et CurrentUICulture par la documentation MSDN et tous les tests passés hier, donc c'est une bonne chose.

0

Si de nouveaux threads ne pas utiliser les mêmes paramètres régionaux que vous pouvez les démarrer:

Thread theNewThread = new Thread(() => 
{ 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 

    //Make something else 
}); 
theNewThread.Start(); 

ou d'une autre manière;

public static void Start(this Thread thread, CultureInfo cu) 
{ 
    //Set the CU here.. 

    thread.Start(); 
} 

N'a pas essayé cela, mais je Gess cela pourrait fonctionner

0

Vous auriez probablement les régler manuellement sur .NET 4.0, comme FelipeP a suggéré, étant donné que les nouvelles vont toujours commencer par la culture par défaut du système (voir les détails ici Set default thread culture for all thread?)

+0

oui, je l'ai déjà confirmé et mis en œuvre le correctif, merci! – Dave

+0

Si cela résout vos problèmes s'il vous plaît marquer comme réponse. –

Questions connexes