Как запустить оператор в главном потоке из задачи - PullRequest
0 голосов
/ 23 апреля 2019

Я создаю задачу, как показано ниже:

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, но возникают проблемы с поиском для веб-форм. Как мне это сделать?

1 Ответ

0 голосов
/ 24 апреля 2019

Task.Factory.Start запустит новый Thread и потому что HttpContext.Context является локальным для thread, оно не будет автоматически скопированы в новую тему, поэтому вам нужно передать ее вручную:

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