2010-09-20 5 views
0

J'ai une application développée avec Visual C++ 2008 Express Edition sous Windwos XP, qui s'exécute proprement sur un ordinateur, où le langaunge par défaut est défini sur l'anglais. Toutefois, si vous exécutez la même application sur un autre ordinateur avec la langue par défaut allemand, je rencontre des problèmes car une chaîne prédéfinie Infinity n'est pas reconvertie lors de la conversion en double en utilisant ToDouble, car sur la plateforme allemande, la chaîne doit être Unendlich. En particulier, le mscorlib lance correctement un FormatException.Comment définir les paramètres régionaux d'une application dans .NET

Comment puis-je forcer l'application à s'exécuter avec les paramètres régionaux anglais? Je ne pouvais pas encore trouver d'option ...

Merci pour tout indice.

Répondre

1

Utiliser Convert :: ToDouble (str, System :: Globalisation :: CultureInfo :: InvariantCulture);

+0

Merci, cela va résoudre le problème pour le moment ... – stefangachter

5

Vous pouvez définir les paramètres régionaux en cours à l'anglais avec:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); 

qui forcera l'anglais américain dans le thread courant. Si vous le faites dans le thread Windows Forms principal, votre culture d'interface utilisateur sera toujours l'anglais. Voir http://msdn.microsoft.com/en-us/library/b28bx3bh(v=VS.100).aspx pour plus d'informations. Comme l'a souligné Hans dans son commentaire, cela n'affecte pas les threads de pool et peut conduire à des bogues difficiles à trouver. Il s'avère qu'il n'y a pas de paramètre global qui fera que chaque thread utilisera la culture que vous définissez. Si vous voulez cette fonctionnalité, vous devrez créer votre propre paramètre à l'échelle de l'application et vous assurer que tous les threads l'utilisent.

Egalement bon à lire serait Globalizing Windows Forms.

+1

Non, thread threads qui exécutent des appels d'achèvement d'E/S et what-not s'exécuteront toujours dans la langue du système. Cela peut causer des bugs très subtils et difficiles à diagnostiquer. Une SortedList n'est soudainement plus triée par exemple. –

+0

Ouais. Laisse moi réparer ça. –

+0

Merci! Dommage qu'il n'y ait pas d'option globale. Je vais jeter un oeil sur les liens mentionnés, cependant. – stefangachter

0

Convert.ToDouble (stringValue, System.Globalization.CultureInfo.InvariantCulture);

Questions connexes