我创建如下任务:
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表单时遇到了麻烦。 我该怎么做?
答案 0 :(得分:0)
Task.Factory.Start
将启动新的Thread
,因为HttpContext.Context
在thread
本地,不会自动 复制到新线程,因此您需要手动传递它:
var task = Task.Factory.StartNew(
state =>
{
var context = (HttpContext) state;
//use context
},
HttpContext.Current);