我有一个asp.net 2.0网络应用程序,它调用一个长时间运行的存储过程(约3分钟)。 sp实际上在后端执行许多任务。
我的页面使用线程和ajax(更新面板)和计时器控件来显示用户的progess栏。这一切都很有效,除非sp中的一个错误只是冻结了屏幕。
我尝试使用我在codeProject上找到的SafeThread类,它包装了线程进程并创建了一个可以在异常的情况下处理的事件。
在事件处理程序中,我只想将用户重定向到错误页面并显示错误。在测试时我可以在事件处理程序中中断。但是,调用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();
}
答案 0 :(得分:1)
处理请求时只能使用Server.Transfer()/ Response.Redirect() - 当你的thrd_ThreadException()被调用时不是这种情况。
尝试在thrd_ThreadException中设置一个标志,并在Timer1 Tick事件中进行重定向。