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

问题描述 投票:0回答:1

我创建了一个如下任务:

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表单。我怎么能做到这一点?

c# asp.net webforms task
1个回答
0
投票

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

var task = Task.Factory.StartNew(
    state =>
        {
            var context = (HttpContext) state;
            //use context
        },
    HttpContext.Current);
© www.soinside.com 2019 - 2024. All rights reserved.