当前位置: 代码迷 >> ASP.NET >> 多线程与Session的访问,该如何解决
  详细解决方案

多线程与Session的访问,该如何解决

热度:7207   发布时间:2013-02-26 00:00:00.0
多线程与Session的访问
网上可以搜索到很多关于通过asp.net长时间执行任务,通过多线程来解决的方法。
我的代码如下:其余多余代码省略
C# code
public partial class _Default : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                if (Session["IsExecExport"] != null)                {                    TextBox1.Text = Session["IsExecExport"].ToString();                }            }        }        protected void Button2_Click(object sender, EventArgs e)        {            Response.Redirect("Default.aspx");        }        protected void Button1_Click(object sender, EventArgs e)        {           System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(Add));            //t.IsBackground = true;            t.Start();        }        private void Add()        {            Session["IsExecExport"] = "1";        }    }

问题如下:
执行Add中访问Session的时候就抛出异常
:只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 <configuration>\<system.web>\<httpModules> 节中包括 System.Web.SessionStateMod 或自定义会话状态模块。
及时在page中添加EnableSessionState="true" 和web.config中添加<pages enableSessionState="true" />也无济于事
web.config中sessionmode为StateServer或者Inproc都试过,也都会有这个错误。
请问如何在多线程内访问Session?
如果该session是在多线程内建立的,则抛出异常,如果是多线程外建立的是可以访问并且修改,但是修改是局部的,执行完后又变回去了。
百思不得其解,谁能说说其中的原理

------解决方案--------------------------------------------------------
楼主可以从这样来想,session其实对于一个多线称来说 是公共资源了,那么如果你在任意一个线程中调用它 , 就需要lock
------解决方案--------------------------------------------------------
我的问题解决了. 多线程是访问不到Session的. 我采用Cache解决了.
  相关解决方案