Asp.Net WebForms 4.62异步操作丢失了当前文化

时间:2017-04-05 07:46:22

标签: asp.net .net asynchronous webforms

我有异步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 ..就像这个评论

1 个答案:

答案 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