separador obtener numberformatinfo c# culture cultureinfo number-formatting

obtener - c# numberformatinfo



¿Es posible configurar CultureInfo para una aplicación.NET o solo un hilo? (4)

Tengo una aplicación escrita en C # que no tiene GUI ni UI, pero en su lugar escribe archivos que son analizados por otra aplicación (en XML y otras).

Tengo un cliente cuyo CultureInfo tiene establecido NumberDecimalSeparator a una coma, lo que provoca errores de análisis con números de punto flotante (PI terminaría como 3,1415 ).

Me gustaría una forma de establecer CultureInfo globalmente dentro de la aplicación, para todos los hilos. He intentado:

  1. El enfoque (aparentemente) habitual de establecer CurrentThread.CurrentCulture como la primera línea en Main (), pero parece restablecerse.
  2. Una variación / expansión en http://www.codeproject.com/KB/cs/Change_App_Culture.aspx
  3. Haga lo mismo (# 1) en los subprocesos creados explícitamente en la aplicación.

Y cambiar para usar un formato explícito no es una opción (150K + líneas, la mayoría escritas por antiguos empleados).

[Editar] La aplicación se enlaza a un socket y maneja solicitudes de clientes dedicados. Dependiendo del tipo de solicitud, genera diferentes clases de manejadores.

Lo siento, cuando publiqué por primera vez, debería haber aclarado en el # 1 que ( aunque pensé) también había hecho esto en todos los controladores que se crearon explícitamente.

Resulta que me perdí el hilo / controlador que estaba causando el problema. Así que la aplicación está funcionando correctamente ahora, pero la pregunta sigue siendo si la cultura se puede establecer en todos los subprocesos.

Si pudiera iterar sobre todos los hilos, también resolvería el problema. Asi que:

¿Cómo puedo obtener todos los objetos Thread (no ProcessThread ) en el proceso actual?


Desafortunadamente, cada subproceso nuevo comienza con la información de configuración regional del sistema, incluso si se inicia desde un subproceso al que se le cambió la configuración regional a otra cosa.

Este fue un gran problema con el que me topé en una de nuestras aplicaciones cuando utilizaba un BackgroundWorker para cargar un archivo.

El enfoque que he usado con éxito es establecer la configuración regional en el subproceso de inicio y luego usar una fábrica de subprocesos para crear subprocesos con la "configuración regional de la aplicación". Para BackgroundWorkers puede usar una fábrica o una clase derivada, ya que Thread está sellado mientras que BackgroundWorker no lo está.


En .NET 4.5 puedes usar CultureInfo.DefaultThreadCurrentCulture


No creo que puedas establecer la cultura para toda la aplicación, pero puedes establecer la cultura de manera explícita siempre que crees un hilo:

using System; using System.Globalization; using System.Threading; class Program { static void thread_test() { Console.WriteLine("Culture: {0}", CultureInfo.CurrentCulture.DisplayName); } public static void Main(params string[] args) { Thread t = new Thread(thread_test); t.CurrentCulture = new CultureInfo("it-it"); t.Start(); t.Join(); } }


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