私の 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 はセッションによって参照されるため、セッションで自動的に更新されます (セッションに再割り当てするために HashTable は必要ありません)。
しかし、状態サーバー (OutProc モード) でコードを実行すると、ハッシュ テーブルをシリアライズして、セッション データを別のプロセスに格納する必要があります。
ただし、スレッドが完全に実行された後でも、Page2.aspx で Total_Pages の値が更新されません。
セッション変数のすべての更新を State-Server に保存するために発生するイベントまたはメソッドはありますか? はいの場合は教えてください。そうでない場合は、page2.aspx で更新された値を取得するためのアイデアを提案してください。