我需要控制新线程的创建,所以它们总是有一些主要的主题。为了做到这一点,我使用了一个ThreadFactory类,我设置了CurrentCulture和CurrentUICulture。
public static class ThreadFactory {
public static Thread Create(ThreadStart start) {
var thread = new Thread(start);
thread.CurrentCulture = CultureInfo.CurrentCulture;
thread.CurrentUICulture = CultureInfo.CurrentUICulture;
return thread;
}
}
例如,如果我想创建一个新线程,它将使用CurrentCulture进行初始化,等于Windows设置,让我们说英语。如果我将主线程更改为西班牙语,新线程仍将是英语。由于这种行为,我总是使用ThreadFactory以这种方式创建新线程:
Thread t1 = ThreadFactory.Create(() => {
//Thread code
});
t1.start();
执行此操作我确信新线程始终以与主线程相同的文化启动,并且不需要在每个线程代码中更改此线程。 问题是我希望还有一个与CurrentCulture相同的财产。 我尝试使用ThreadStatic属性,但它在子线程中初始化为null值。并且使用它作为静态属性是不可能的,因为我需要它对主线程是线程安全的。
答案 0 :(得分:0)
我很久以前也有同样的问题,然后我发现了这个问题,你可以把你想要的一切都放在那个帖子里:
private static void CreateThread()
{
var currentCulture = Thread.CurrentThread.CurrentCulture;
var currentUICulture = Thread.CurrentThread.CurrentUICulture;
var thread = new Thread(() =>
{
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentUICulture;
// Do something here, example:
Thread.Sleep(5000);
}) {IsBackground = true};
thread.Start();
}