我有异步WebForms页面(最新的.Net Framework 4.62),并像我的代码一样在InitializeCulture方法中设置文化。我在Page RegisterAsyncTask上运行异步操作,但是当我从异步操作(另一个线程)获取回调时,我丢失了CurrentCulture。 DefaultThreadCurrentCulture有正确的文化,但CurrentThread.CurrentCulture是错误的。你有没有解决过同样的问题?
protected override void InitializeCulture()
{
Thread.CurrentThread.CurrentUICulture = currentCulture;
Thread.CurrentThread.CurrentCulture = currentCulture;
CultureInfo.CurrentCulture = currentCulture;
CultureInfo.CurrentUICulture = currentCulture;
CultureInfo.DefaultThreadCurrentCulture = currentCulture;
CultureInfo.DefaultThreadCurrentUICulture = currentCulture;
}
当我将.Net Framework从4.51更新到4.62时,线程文化丢失的问题开始了。当我设置webforms页面async = true时,我在事件PreRenderComplete中具有默认线程文化,并且在InitializeCulture方法中设置了当前文化。它不依赖于我是否注册了一些异步操作。我知道异步操作回调可以在另一个线程上,但是异步操作在async方法开始执行之前我的文化很差。异步方法执行后的问题我可以用自定义同步上下文解决,atd ..就像这个评论
答案 0 :(得分:0)
我们有同样的问题。我们通过添加以下设置对其进行了修复:
<add key="appContext.SetSwitch:Switch.System.Globalization.NoAsyncCurrentCulture" value="true" />
请参见OwinMiddleware doesn't preserve culture change in .net 4.6.*和ASP.NET Middleware doesn't preserve culture anymore。