2013-08-23 248 views
3

我有一個有趣的情況,語言環境設置與我的C#應用​​程序混淆,因爲我沒有意識到像Double.Parse這樣的方法不會將「1000」轉換爲1000,但由於編號格式不同,請做一些意想不到的事情。更改應用程序的語言環境而不更改Windows語言環境

我的問題的一個解決方案是使用類似double d = double.parse("1000", new CultureInfo("en-US"));的東西。目前,我沒有通過CultureInfo。然而,我不知道是否可能在啓動時影響的區域設置,而僅僅是我的應用程序

我發現了一個article on MSDN,說我可以用下面的代碼實現這一點:

using System.Threading; 
using System.Globalization; 
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 

不過,這並不表示工作線程是否從主線程產生也將繼承父的文化。

我想這是不是這樣,在.NET 4.5有顯然是一個CultureInfo.DefaultThreadCurrentCulture屬性指定用於在應用程序域的所有線程的文化,但沒有像這樣在.NET 4.0中什麼。

任何人都可以推薦一個很好的解決方案,這個地區的問題?

回答

0

最後我只是想出來。在.NET 4.0中,新線程不是繼承它們創建的線程的語言環境。我確實爲每個MSDN文檔設置了CurrentCultureCurrentUICulture,並且所有測試昨天都通過了,所以這是件好事。

0

如果新的線程不會使用相同的語言環境,你可以這樣開始他們:

Thread theNewThread = new Thread(() => 
{ 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 

    //Make something else 
}); 
theNewThread.Start(); 

或者以其他方式轉讓;

public static void Start(this Thread thread, CultureInfo cu) 
{ 
    //Set the CU here.. 

    thread.Start(); 
} 

沒試過,但我GESS它可以工作

0

你可能不得不手動設置它們.NET 4.0,像FelipeP建議,因爲新的將始終與系統默認啓動的文化(見這裏Set default thread culture for all thread?細節)

+0

是的,我已經證實,並實施修復,謝謝! – Dave

+0

如果它解決了您的問題,請將其標記爲答案。 –

相關問題