如何在使用asp.net完成一些后台进程后重定向同一页面?

时间:2011-05-23 12:56:05

标签: asp.net

我正在创建一个应用程序,逐个显示学生详细信息。当用户点击btnDetails然后我需要启动一个线程,在几秒钟后显示下一个学生的详细信息(这不是硬编码)我需要实时生成详细信息所以需要时间,即2-3分钟,所以我想等。

我已经完成了这段代码,但是获得了异常“响应在此上下文中不可用”,所以如何解决这个问题。

protected void btnNext_Click(object sender, ImageClickEventArgs e)
{
    Response.Status = "301 Moved Permanently";
    Response.AddHeader("Location", "http://localhost:2653/WebSite1/Default.aspx");
}

public void NextStudent()
{
try
{
    int iCont = 0;
    while (true)
    {
    Thread.Sleep(3000);
    iCont++;
    if (iCont > 5)
    {
        btnNext_Click(this, null);
        break;
    }
    }            
}
catch (Exception ex)
{
    Response.Write(ex.Message);
}

}
protected void btnDetails_Click(object sender, EventArgs e)
{
Thread threadNextQuestion = new Thread(new ThreadStart(NextStudent));
threadNextQuestion.SetApartmentState(ApartmentState.STA);
threadNextQuestion.Start();
}

当我手动点击btnNext然后它工作正常,但调用NextStudent()方法得到错误。

所以请建议我如何处理这个问题。

谢谢, Laxmilal Menaria

2 个答案:

答案 0 :(得分:1)

只有您的主线程可以访问Response对象。因此,您需要同步调用NextStudent或在您的线程中注册回调委托。

答案 1 :(得分:1)

试试这个:

this.Response.Redirect(this.Request.Url.AbsolutePath);