如何在任务的主线程上运行语句

时间:2019-04-23 06:39:21

标签: c# asp.net webforms task

我创建如下任务:

ExportTask = Task.Factory.StartNew(() => ExcelExport(rs, ReportCenter));

在ExcelExport()方法内部,我想运行一条语句来保存excel电子表格,但它必须位于主线程上:

workbook.SaveAs(String.IsNullOrWhiteSpace(AppSettingsUtils.GetString("ExportExcelFileName")) ? "Export.xlsx" : AppSettingsUtils.GetString("ExportExcelFileName"), Response, ExcelDownloadType.PromptDialog, ExcelHttpContentType.Excel2013);

对此,我很好奇如何在任务中从这样的语句中获取值:

ReportCenter = HttpContext.Current.Profile.GetPropertyValue("ReportCenter");

似乎在Windows表单上有很多信息,但是在查找Web表单时遇到了麻烦。 我该怎么做?

1 个答案:

答案 0 :(得分:0)

  

Task.Factory.Start将启动新的Thread,因为   HttpContext.Contextthread本地,不会自动   复制到新线程,因此您需要手动传递它:

var task = Task.Factory.StartNew(
    state =>
        {
            var context = (HttpContext) state;
            //use context
        },
    HttpContext.Current);