【发布时间】:2016-03-15 18:33:00
【问题描述】:
我正在编写一个程序,它会在启动时改变程序文化。在 App.cs 中:
if (tokens[0].Equals("english"))
{
System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("en-US");
}
else if (tokens[0].Equals("portuguese"))
{
System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("pt-BR");
}
else if (tokens[0].Equals("spanish"))
{
System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("es-CO");
}
我在这个切换之后立即打印出线程和 CurrentUICulture 名称。似乎没问题。
但是,然后在 TextBox 中的 GainKeyboardFocus 事件中,我会根据文化发生不同的事情。但是,它似乎无法正常工作。当我打印出线程和 CurrentUICulture 时,线程看起来是一样的(都是线程 1),但是 CurrentUICulture 又恢复了默认值。
【问题讨论】:
-
我现在测试它。在 App 构造函数中添加 set UICulture 并在 TextBox 的 GotKeyboardFocus 中检查 - 它们是相同的。检查您的其他代码是否有错误。
-
我认为发生的事情是 MainWindow 正在一个新线程上运行,它恰好与第一个线程具有相同的 ID。这意味着新线程(具有相同 ID)具有默认线程。你如何获得窗口正在运行的线程?
-
我调用 System.Diagnostics.Debug.WriteLine($"{System.Threading.Thread.CurrentThread.ManagedThreadId} {System.Threading.Thread.CurrentThread.CurrentUICulture}");在 App.cs 和 MainWindow.xaml.cs 中 ManagedThreadId 对于应用程序中的线程是唯一的
标签: c# wpf textbox internationalization cultureinfo