2008-10-09 3 views
0

내 Windows 양식 응용 프로그램의 백그라운드 작업자 프로세스에서 현지화 된 메시지와 함께 이상한 동작이보고됩니다..Net 백그라운드 작업자 프로세스 현지화 도움말

응용 프로그램은 Windows 양식이있는 설치 응용 프로그램입니다. 응용 프로그램이 수행 할 백그라운드 작업자를 시작하고 IIS를 재설정 한 다음 MSI를 설치합니다.

스페인어 Windows Server 2003 VM에서 응용 프로그램을 처음 실행하면 양식은 스페인어이지만 BWP 메시지는 아닙니다. 즉시 다시 실행하면 메시지가 스페인어로 표시됩니다.

.Resources 파일은 포함 된 리소스이며 응용 프로그램 시작시 temp 디렉토리로 추출됩니다.

내 코드는 사용자 지정 리소스 관리자 클래스를 통해 지역화 된 문자열을 검색합니다. 이 클래스는 temp 디렉토리의 .Resources 파일에 대한 파일 기반 리소스를 만듭니다. Windows 양식 라벨과 제목이 매번 현지화 되었기 때문에이 작업이 올바르게 작동합니다.

누구에게 경험이 있습니까? 나는 절대적으로 붙어있어, 제발 도와주세요. 감사합니다, Andrew

+0

그것은 오랜만이야,하지만 난 믿는다 해결책은 BWP를 실행하기 전에 Windows temp 디렉토리에 리소스 파일을 추출한 다음 메시지에 CurrentUICulture를 사용하는 것이 었습니다. –

답변

1

문화 정보는 스레드 로컬 저장소에 있으므로 백그라운드 작업자가 다른 스레드에서 프로세스를 실행하는 경우 예상 할 수 있습니다.

http://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture.aspx

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture.aspx

나는 어떤 스레드에서 문화 정보를 transfering에 권장되는 연습,하지만 확실하지 않다.

4

당신의 UIThread이 BackgroundWorker에보다 다른 UICulture를 실행하면 할 수있는 명시 적 변화 이와 같은 콜백을 사용하여 작업자 스레드의 문화 :이 질문을하기 때문에

 private delegate CultureInfo GetUICultureCallback(); 

     private CultureInfo GetUICulture() 
     { 
      if (this.InvokeRequired) 
      { 
       return (CultureInfo)this.Invoke(new GetUICultureCallback(GetUICulture)); 
      } 

      return System.Threading.Thread.CurrentThread.CurrentUICulture; 
     } 

     void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
     { 
      System.Threading.Thread.CurrentThread.CurrentUICulture = GetUICulture(); 

      for (; ;) 
      { 
       if (backgroundWorker.CancellationPending) 
       { 
        e.Cancel = true; 
        return; 
       } 
. 
. 
. 
관련 문제