【发布时间】:2021-12-02 11:36:24
【问题描述】:
在 WPF 应用程序中,我尝试在 OnStartup 中设置文化。
protected override async void OnStartup(StartupEventArgs startupEventArgs)
{
base.OnStartup(startupEventArgs);
var a = new CultureInfo(ConfigurationManager.AppSettings["Language"]);
Thread.CurrentThread.CurrentCulture = a;
Thread.CurrentThread.CurrentUICulture = a;
CultureInfo.DefaultThreadCurrentCulture = a
CultureInfo.DefaultThreadCurrentUICulture = a;
CultureInfo.CurrentCulture = a;
}
如果我使用Click 事件或ICommand 从MainWindow 开始一个方法,那么在该方法中Thread.CurrentThread.CurrentUICulture 将始终为en-US,这很奇怪(有人可以解释一下吗?)。我可以再次设置为所需的Culture,但我必须在每个调用的方法中一一进行。有其他选择吗?
在 .net4.7 中有一个 workaround,但它在 .net5 中不起作用。
【问题讨论】:
-
OnStartup方法为什么是async有什么原因吗?我可以使用async关键字重现该问题,但如果我删除它,则会设置正确的文化并使用该文化格式化字符串。因此,如果不需要,也许只需删除async部分? -
@LarsKristensen 没有使用
await运算符,所以我很困惑如何/为什么会有所作为...... -
@Dai 我对异步编程不太熟悉,所以我也不知道如何或为什么——但如果我在
OnStartup方法的async版本中设置断点,它被击中并设置了文化 - 之后加载主窗口时它就不起作用了。但是,我仍然想知道OnStartup首先是async的原因 - 这在什么情况下有用? -
@LarsKristensen
OnStartup实际上要长得多,为了简洁起见,我将其缩短了。省略的部分有await。