从后台线程访问SessionState

本文关键字:SessionState 访问 线程 后台 | 更新日期: 2023-09-27 17:58:03

我有一个asp.net页面,它执行一个长时间运行的任务。因此,我在一个单独的线程中执行该任务,并定期轮询页面以检查状态。

public partial class ResultPage : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      Thread t = new Thread(new ThreadStart(delegate()
      {
         ProcessItems(parameters);
      }));
      t.Name = "ThreadInfoPathProcess";
      t.Priority = ThreadPriority.Normal;
      t.Start();
   }
   private void ProcessItems(Parameters params)
   {
      //
      //some code
      //
      //save the result in session and take it from another page
      lock (this.Session.SyncRoot)
         this.Session[resultid] = result;
   }
}

但是,当我从另一个页面访问会话时,会话变量为null。这里可能有什么问题?

从后台线程访问SessionState

正确的方法是创建windows服务,通过web应用程序的远程调用(WCF-可以是本地的命名管道)来调度长时间运行的进程。然后,您的计时器将对页面进行池化,该页面将依次对windows服务进行池化或在数据库中检查一些状态记录和结果。