asp.net – 线程更新的Asp .net会话变量没有反映在Session中
在我的page1.aspx中,我使用线程从数据库生成报告.
//on button click Hashtable ht = (Hashtable)Session["ReportParam"]; ReportThreadClass rth = new ReportThreadClass(ht); Thread thread = new System.Threading.ThreadStart(rth .Run); thread.Start(); 在我的线程类的朗姆酒方法中,我正在更新Hashtable中的值,即我创建了多少页. //in thread' method public virtual void Run() { int pagecount=0; while(done) { //loading data from DB and generating html pages ht["Total_Pages"] = pagecount; } } 在我的Page2.aspx我正在读取会话变量的值 Hashtable ht = (Hashtable)Session["ReportParam"]; int TotalPages = (int) ht["Total_Pages"]; 当我在InProc模式下运行上面的代码时,每件事情都正常工作我从会话中获取更新的值. 但是当我在状态服务器(OutProc模式)中运行代码时,它需要通过Serializing Hash-table在不同的进程中存储会话数据. 但是,即使Thread完全运行,Total_Pages的值也没有在Page2.aspx中更新. 那么是否有任何事件或方法被触发以将会话变量中的所有更新存储到State-Server,如果是,那么请告诉我.如果没有,那么请建议我在page2.aspx中获取更新值. 解决方法
在Out Proc Mode中,会话在某个事件之后保存,因此如果您的线程正在更新会话变量,那么它将不会保留在存储中.
如果您正在使用Inproc模式,那么会话存储在静态字典中,因此如果您的线程更新它,您将获得任何页面的更新值. 所以你有两个解决这种情况的方法 >使用inProc模式>使用键维护线程类中的字典,因为会话ID和值是您的哈希表,因此,如果page2.aspx想要读取哈希表的值,那么它会将其会话ID传递给方法,并返回所需的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core – 如何使用asp-for标签绑定数组?
- ASP.Net文本框从右到左
- asp.net-mvc – ASP.NET MVC:使用自定义错误消息向jQuery发
- asp.net-core – ASP.NET核心DisplayAttribute本地化
- asp.net-mvc – ASP.NET MVC Views可以在不同的项目中重用吗
- 如何使用ASP.Net SqlBulkCopy将常量值插入到列中
- asp.net-core – 身份aspnet核心微服务
- asp输出xml格式文件时的一个诡异错误及解决方法:XML decla
- asp.net – 为什么viewstate序列化为表单中的隐藏字段而不保
- asp.net-mvc – 用于电子邮件创建和发送的ASP.Net MVC后台线
- asp.net-web-api – 从ASP.NET WebAPI 2中的头和
- asp.net-mvc – ASP.NET MVC验证针对空列表框抛出
- 如何在asp.net中使用控件状态
- asp.net-mvc – Asp.net MVC NoSQL数据库
- asp.net – <#=#>是什么意思
- 在Asp.Net中使用JQuery绑定DropDownlists
- asp.net-mvc – jQuery.POST – 使用Form.Serial
- asp.net-mvc – ASP.NET MVC 3多语言SEO
- asp.net-mvc – 如何在ASP.NET MVC中使用单选模式
- asp.net – 在Response.RedirectToRoute之后跳过