我有一个流程,它输出逐步消息(即,处理项目 1...项目 2 中的错误等)。
我希望在整个过程中(而不是最后)将其输出给用户。
我很确定我需要使用线程来完成此操作,但找不到合适的示例。
这不是线程问题,而是 Web 浏览器 UI 问题。您希望浏览器在您在服务器上工作时呈现状态。理论上你可以这样做:
Response.Write("something");
Response.Flush();
but the Flush()
无法确保浏览器此时实际呈现您的代码。实际上,您无法控制数据从服务器到浏览器的缓存/分块/缓冲方式。因此每次更新都应该是一个“完整的”http 事务。
一种方法(也是常见的方法)是使用 AJAX 来实现此目的。用户单击一个按钮来启动一些后台工作,并且您有一个 JavaScript 计时器,它会轮询(发出请求)以检查工作的状态,并更新客户端浏览器。
查看使用 ASP.NET AJAX 的实时进度条 http://www.singingeels.com/Articles/RealTime_Progress_Bar_With_ASPNET_AJAX.aspx用于使用 ajax 和 .net 制作 ajax 进度指示器。
本文中有一个使用 http 处理程序创建进度条的绝佳示例:http://www.asp101.com/articles/matt/progressbar/default.asp 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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)