В моем page1.aspx я создаю отчет из базы данных с помощью потока.Обновление переменных сеанса Asp .net по потоку не находит отражение в сеансе
//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 я читаю значения из сессии Variable
Hashtable ht = (Hashtable)Session["ReportParam"];
int TotalPages = (int) ht["Total_Pages"];
Когда я запускаю выше код в режиме InProc каждая вещь работает отлично, я получаю обновленные значения из сессии. Поскольку каждая вещь хранится в статической переменной, а ht ссылается на Session, поэтому она автоматически обновляется в сеансе (HashTable не требуется переназначать ее на сеанс).
Но когда я запускаю код в государственном сервере (режим OutProc), он должен хранить данные сеанса в разных процессах, сериализуя Hash-таблицу.
Но значение Total_Pages не обновляется в Page2.aspx даже после полного запуска Thread.
Итак, есть ли какое-либо событие или метод, которые будут уволены, чтобы хранить все обновления в переменной сеанса в State-Server, если да, тогда скажите мне. если нет, тогда PLS предложит мне некоторую идею получить обновленное значение в page2.aspx.
Как вы вызываете свой Page2.aspx – user1130157
Я постоянно вызываю его из JQuery, пока он полностью не загрузит все страницы. –
Когда вы запускаете режим OutProc и пытаетесь отладить, есть ли второе событие Session_Start при запуске Page2.aspx? – Alexander