How can I change the CurrentCulture of the entire process (not just current thread) in .Net?
.net, c#, globalization, localization
Solution
You'll have to change the operating system locale if you want to do that. For what reason do you want BackgroundWorkers to run in en-US?
You should have your business layer running in an invariant culture, and only have a specific culture for the end user's UI.
If you are using the BackgroundWorker component, and have to do this you could try something like this in the DoWork method:
// In DoWork
System.Globalization.CultureInfo before = System.Threading.Thread.CurrentThread.CurrentCulture;
try
{
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("en-US");
// Proceed with specific code
}
finally
{
System.Threading.Thread.CurrentThread.CurrentUICulture = before;
}
Problem
I have a situation where I need to set my process' locale to en-US. I know how to do this for the current thread: ``` System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US"); ``` But my application uses `BackgroundWorkers` to do some processing, and the locale for these worker threads seems not to be affected by the above change to their spawning main-thread. So how can I set the locale for all the threads in my application without setting it in each one manually?