У меня есть веб-приложение asp.net 2.0, которое вызывает долго работающий хранимый процесс (около 3 минут). SP фактически выполняет много задач на бэкэнде.
Моя страница использует многопоточность и ajax (панель обновления) и элемент управления таймером, чтобы отображать полосу прогей для пользователя. Это все прекрасно работает, если только в sp нет ошибки, которая просто зависает на экране.
Я пытался использовать класс SafeThread, который я нашел в codeProject , который оборачивает процесс потока и создает событие, которое может быть обработано в случае исключения.
В обработчике событий я просто хочу перенаправить пользователя на страницу ошибки и отобразить ошибку. При тестировании я могу взломать обработчик событий. Однако вызов Server.Transfer или Response.Redirect вообще не имеет никакого эффекта.
Я не уверен, почему это происходит. Я опубликую свой код ниже. Любые идеи или альтернативные предложения приветствуются.
protected void btnSave_OnClick(object sender, EventArgs e)
{
DAC dac = new DAC();
Session["RerunStatus"] = 0;
SafeThread thrd = new SafeThread(new ParameterizedThreadStart(dac.RerunTest));
thrd.IsBackground = true;
//tell the SafeThread to report
//ThreadAbort exceptions
thrd.ShouldReportThreadAbort = true;
//attach a ThreadException handler for
//reporting SafeThread exceptions
thrd.ThreadException += new
ThreadThrewExceptionHandler(thrd_ThreadException);
thrd.Start(ddlRundate.SelectedItem.Text);
Session["RerunThread"] = thrd;
btnSave.Enabled = false;
Timer1.Enabled = true;
}
void thrd_ThreadException(SafeThread thrd, Exception ex)
{
//thrd.Abort();
Timer1.Enabled = false;
//Response.Redirect("ErrorPage.aspx");
Server.Transfer("ErrorPage.aspx?ErrorMsg=" + ex.Message);
//thrd.Abort();
}