2008-10-09 32 views
0

我在使用Windows窗體應用程序中的背景工作進程報告本地化消息時遇到了一些奇怪的行爲。.Net後臺工作進程本地化幫助

該應用程序是一個安裝程序與Windows窗體。 該應用程序啓動後臺工作來執行和IIS重置,然後安裝MSI。

我第一次在西班牙Win Server 2003 VM上運行該應用程序時,表單使用西班牙語,但不使用BWP消息。如果我立即再次運行它,這些消息是西班牙文。

.Resources文件是嵌入式資源,在應用程序啓動時被解壓縮到臨時目錄。

我的代碼通過自定義資源管理器類檢索本地化的字符串。此類爲temp目錄中的.Resources文件創建基於文件的資源。這是工作正常,因爲Windows窗體標籤和標題每次本地化。

有沒有人遇到過這個?我絕對堅持,請幫助。 謝謝,安德魯

+0

這已經有一段時間,因爲我問過這個問題,但我相信解決方案是在運行BWP之前首先將資源文件提取到Windows臨時目錄,然後使用CurrentUICulture作爲消息。 – 2008-11-19 17:31:29

回答

4

如果您UIThread運行的其他的UICulture比你的BackgroundWorker,你可以明確的變化,工作線程通過使用一個回調像這樣的文化:

 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; 
       } 
. 
. 
.