我有一个流程,它逐步输出消息(即处理项目1 ......项目2中的错误等)。
我希望在此过程中将其输出给用户,而不是最后。
我很确定我需要使用线程进行此操作,但找不到合适的示例。
答案 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();
}