首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CurrentUICulture MVC 3.0中将CurrentUICulture传递给异步任务

在CurrentUICulture MVC 3.0中将CurrentUICulture传递给异步任务
EN

Stack Overflow用户
提问于 2011-09-22 07:46:02
回答 1查看 1.6K关注 0票数 5

活动语言是从url确定的,然后在

代码语言:javascript
复制
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureInfo.Name);

这样,就可以从正确的资源文件中检索翻译。

在控制器上使用异步操作时,我们有一个后台线程,其中Thread.CurrentThread.CurrentUICulture被设置为OS默认值。但在后台线程上,我们需要正确的语言。

我创建了一个TaskFactory扩展来将区域性传递给后台线程,它看起来如下所示:

代码语言:javascript
复制
public static Task StartNew(this TaskFactory taskFactory, Action action, CultureInfo cultureInfo)
{
    return taskFactory.StartNew(() =>
    {
         Thread.CurrentThread.CurrentUICulture = cultureInfo;
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureInfo.Name);

         action.Invoke();
     });
}

这允许我在操作控制器中执行以下操作:

代码语言:javascript
复制
 [HttpPost]
 public void SearchAsync(ViewModel viewModel)
 {
     AsyncManager.OutstandingOperations.Increment();
     AsyncManager.Parameters["task"] = Task.Factory.StartNew(() =>
     {
         try
         {
               //Do Stuff
               AsyncManager.Parameters["viewModel"] = viewModel;
         }
         catch (Exception e)
         {
             ModelState.AddModelError(string.Empty, ResxErrors.TechnicalErrorMessage);
         }
         finally
         {
             AsyncManager.OutstandingOperations.Decrement();
         }
     }, Thread.CurrentThread.CurrentUICulture);
 }



 public ActionResult SearchCompleted(Task task, ViewModel viewModel)
 {
     //Wait for the main parent task to complete. Mainly to catch all exceptions.
     try { task.Wait(); }
     catch (AggregateException ae) { throw ae.InnerException; }

     return View(viewModel);
 }

这一切都很完美,但我确实有些顾虑。

这是在调用原始操作之前通过设置区域性来扩展操作的正确方法吗?

有谁知道将te CurrentUICulture传递给ASP.NET MVC异步操作的后台线程的不同方法吗?

  • 会话不是一种选择。
  • I do正在考虑使用CallContext.

对这段代码还有其他评论吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-30 07:47:36

问题中所描述的方式似乎就是答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7511318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档