2010-02-10 3 views
21

나는 GUI 나 UI가없는 C#으로 작성된 응용 프로그램을 가지고 있지만 다른 응용 프로그램 (XML 등)에서 파싱 된 파일을 작성합니다..NET 응용 프로그램 또는 스레드에 대한 CultureInfo를 설정할 수 있습니까?

고객의 CultureInfo에 NumberDecimalSeparator가 쉼표로 설정되어있어 부동 소수점 숫자로 구문 분석 오류가 발생합니다 (PI는 3,1415).

나는 모든 스레드에 대해 응용 프로그램 내에서 CultureInfo를 전역으로 설정하는 방법을 원합니다. 나는 시도했다 :

  1. 홈페이지()의 첫 번째 행으로 CurrentThread.CurrentCulture을 설정하는 (분명히) 관습 접근하지만 다시 얻을 것으로 보인다.
  2. 변형/확장 on http://www.codeproject.com/KB/cs/Change_App_Culture.aspx
  3. 응용 프로그램에서 명시 적으로 생성 된 스레드에서 동일하게합니다 (# 1).

명시 적 서식을 사용하도록 변경하는 것은 옵션이 아닙니다 (150K + 회선, 대부분 이전 직원이 작성).

[편집] 응용 프로그램이 소켓에 바인딩되어 전용 클라이언트의 요청을 처리합니다. 요청 유형에 따라 다른 핸들러 클래스가 생성됩니다.

죄송합니다. 처음 게시했을 때 # 1에서 분명히 밝혀야했는데 (비록 내가) 명시 적으로 생성 된 모든 처리기에서도이 작업을 수행했습니다.

문제를 일으키는 스레드/처리기를 놓친 것으로 나타났습니다. 이제 응용 프로그램이 올바르게 작동하지만 모든 스레드에서 문화권을 설정할 수 있는지 여부는 의문의 여지가 있습니다.

모든 스레드에서 반복 할 수 있다면 문제도 해결됩니다. 그래서 :

어떻게 현재 프로세스의 모든 스레드 객체 (안 ProcessThread)을받을 수 있나요?

답변

13

불행히도, 모든 새로운 스레드가 시스템 로케일 정보로 시작을 로케일이 다른 것으로 변경된 스레드에서 시작된 경우에도 마찬가지입니다.

이것은 파일을로드 할 때 BackgroundWorker을 사용할 때 우리 앱 중 하나에서 만난 거대한 잡았다.

성공적으로 사용한 방법은 시작 스레드에서 로캘을 설정 한 다음 스레드 팩터 리를 사용하여 "응용 프로그램 로캘"로 스레드를 만드는 것입니다. BackgroundWorkers의 경우 Thread은 봉인 된 BackgroundWorker이 아니므로 팩토리 또는 파생 클래스를 사용할 수 있습니다.

+6

당신이 스레드의 생성을 제어 할 수 있습니다 경우에만 도움 사용할 수 있습니다. 때로는 .NET에서 만든 스레드를 다루어야합니다. 신성한 줄 ** System.Threading.Thread.CurrentThread.CurrentCulture = 새로운 시스템 .Globalization.CultureInfo ("EN-US"); ** – Bitterblue

6

난 당신이 전체 응용 프로그램에 대한 문화를 설정할 수 있다고 생각하지 않습니다,하지만 당신은 스레드 만들 때마다 당신은 문화 explicilty을 설정할 수 있습니다

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(); 
    } 
} 
3

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

26

.NET 4.5에서는 CultureInfo.DefaultThreadCurrentCulture

관련 문제