首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2012-02-01 
多线程与Session的访问网上可以搜索到很多关于通过asp.net长时间执行任务,通过多线程来解决的方法。我的代

多线程与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解决了.

热点排行