在我的 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();
在我的线程类的 rum 方法中,我正在更新 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 引用,所以它会在 session 中自动更新(不需要将 HashTable 重新分配给 session )。
但是当我在状态服务器(OutProc 模式)中运行代码时,它需要通过序列化哈希表将会话数据存储在不同的进程中。
但是即使在 Thread 完全运行之后,Total_Pages 的值也不会在 Page2.aspx 中更新。
那么是否有任何事件或方法被触发以将会话变量中的所有更新存储到 State-Server ,如果是,请告诉我。如果没有,请建议我在 page2.aspx 中获取更新值。