@ Рори прокомментировал выше, что некоторые объекты в HttpContext
станут нулевыми, даже если вы передадите их в поток. Это случилось со мной со свойством User
. Таким образом, вместо этого вы можете скопировать пользователя в поток CurrentPrincipal следующим образом:
В контексте контроллера сохраните пользователя:
_user = HttpContext.Current.User;
var processThread = new Thread(() => ThreadedCode());
processThread.Start();
В теме укажите пользователя «Тема»:
private static void ThreadedCode()
{
// Workaround for HttpContext.Current.User being null.
// Needed for CreatedBy and RevisedBy.
Thread.CurrentPrincipal = _user;
Обратите внимание, что HttpContext будет доступен только в течение срока действия запроса. Поток будет жить потенциально намного дольше, чем запрос, поэтому, возможно, вам нужен поток в первую очередь! :)