В моей странице1.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 ссылается сеанс, поэтому он автоматически обновляется в сеансе (HashTable не требуется, чтобы переназначить его обратно в сеанс).
Но когда я запускаю код на сервере состояний (режим OutProc), ему необходимо хранить данные сеанса в другом процессе путем сериализации хэш-таблицы.
Но значение Total_Pages не обновляется в Page2.aspx даже после полного запуска потока.
Итак, есть ли какое-либо событие или метод, который запускается для сохранения всех обновлений в переменной сеанса на State-Server, если да, то, пожалуйста, сообщите мне. если нет, то, пожалуйста, предложите мне какую-нибудь идею, чтобы получить обновленное значение в page2.aspx.