加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 线程更新的Asp .net会话变量没有反映在Session中

发布时间:2020-12-16 09:39:02 所属栏目:asp.Net 来源:网络整理
导读:在我的page1.aspx中,我使用线程从数据库生成报告. //on button clickHashtable ht = (Hashtable)Session["ReportParam"];ReportThreadClass rth = new ReportThreadClass(ht);Thread thread = new System.Threading.ThreadStart(rth .Run);thread.Start();
在我的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模式下运行上面的代码时,每件事情都正常工作我从会话中获取更新的值.
因为每个东西都存储在静态变量中,并且ht被Session引用,所以它会在会话中自动更新(HashTable不需要将它重新分配给会话回来).

但是当我在状态服务器(OutProc模式)中运行代码时,它需要通过Serializing Hash-table在不同的进程中存储会话数据.

但是,即使Thread完全运行,Total_Pages的值也没有在Page2.aspx中更新.

那么是否有任何事件或方法被触发以将会话变量中的所有更新存储到State-Server,如果是,那么请告诉我.如果没有,那么请建议我在page2.aspx中获取更新值.

解决方法

在Out Proc Mode中,会话在某个事件之后保存,因此如果您的线程正在更新会话变量,那么它将不会保留在存储中.

如果您正在使用Inproc模式,那么会话存储在静态字典中,因此如果您的线程更新它,您将获得任何页面的更新值.

所以你有两个解决这种情况的方法

>使用inProc模式>使用键维护线程类中的字典,因为会话ID和值是您的哈希表,因此,如果page2.aspx想要读取哈希表的值,那么它会将其会话ID传递给方法,并返回所需的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读