如何在ASP.NET中处理数据时更新进度消息?

时间:2010-03-27 20:25:26

标签: c# asp.net multithreading progress-bar

我有一个流程,它逐步输出消息(即处理项目1 ......项目2中的错误等)。

我希望在此过程中将其输出给用户,而不是最后。

我很确定我需要使用线程进行此操作,但找不到合适的示例。

1 个答案:

答案 0 :(得分:6)

这不是线程问题,而是Web浏览器UI问题。您希望浏览器在服务器上工作时呈现状态。从理论上讲,你可以做类似的事情:

Response.Write("something");
Response.Flush();

Flush()无法确保浏览器实际呈现您当时的代码。实际上,您无法控制数据从服务器到浏览器的缓存/分块/缓冲方式。因此,每次更新都应该是一个“完整的”http事务。

一种方法,也就是常见方法,就是使用AJAX来实现这一目标。用户单击一个启动某些后台工作的按钮,并且您有一个javascript计时器,它会轮询(发出请求)以检查工作状态,并更新客户端浏览器。

检查Real-Time Progress Bar With ASP.NET AJAX是否使用ajax和.net执行ajax进度指示器。

本文中有一个使用http处理程序创建进度条的绝佳示例:http://www.asp101.com/articles/matt/progressbar/default.asp

为了证明我的观点,以下代码适用于Firefox,但不适用于IE或Chrome:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Buffer = false;
    Response.Clear();
    Response.Write("<html><body>");
    Response.Write("1\n");
    Response.Flush();
    Thread.Sleep(2000);
    Response.Write("1\n");
    Response.Flush();
    Thread.Sleep(2000);
    Response.Write("1\n");
    Response.Flush();
    Thread.Sleep(2000);
    Response.Write("1\n");
    Response.Flush();
    Response.Write("</body></html>");
    Response.End();
}