找回密码
 立即注册
首页 业界区 业界 使用Response.Flush方法实时显示处理过程的状态信息 ...

使用Response.Flush方法实时显示处理过程的状态信息

擘塞 2025-5-29 20:09:26
Web项目,在处理大数据量和复杂业务的情况下,用户在浏览器中点击一个按钮后,服务器需要处理几十秒甚至好几分钟,才能将处理结果反馈给用户,在这个漫长的等待过程中,用户面对毫无反应的浏览器会不知所措,即便提示用户正在处理,用户由于不知道服务器的处理状态,在长时间等待后,也会不耐烦或误以为操作失败,而去刷新或者关闭浏览器。
 
怎么应对这种状态,给用户一个更好的体验呢?最好是把处理过程中的状态信息即时反馈给用户,就像杀毒软件扫描文件的时候,把扫描结果即时显示出来。
 
HttpResponse 类 位于命名空间:  System.Web 。
HttpResponse 类的方法和属性通过 HttpApplication、HttpContext、Page和UserControl类的Response属性公开。
HttpResponse 类的方法 Write,将信息写入 HTTP 响应输出流。
HttpResponse 类的方法 Flush,用来向客户端强制发送当前所有缓冲的输出数据,在请求处理期间,允许多次调用该方法。改方法仅仅在回发的情况(不包括异步回发情况)下才被支持。
 
我们可以利用Response.Flush方法来实现上述设想。
 
下面用一个示例来演示如何实时提示处理过程的状态。出于演示的目的,将不考虑具体的业务。
 
在网站项目里,新建一个Web窗体Default.aspx。
 
窗体上放置一个Button控件,给Button控件添加“Click”处理事件。我们将单击这个Button,来触发传说中的大数据量的超复杂的业务运算。
 
再往窗体上添加一个元素:

 
注意的src属性的值是“Output.aspx”。再追加一个新的Web窗体,名为“Output.aspx”,通过请求它在里来显示处理结果。
 
删除Output.aspx页面上的所有自动生成的html代码。在Page_Load事件里添加处理过程,处理那个传说中的大数据量的超复杂的业务运算。并且在这个处理过程中,实时地用Response.Write方法输出当前处理的状态信息,并且用Response.Flush强制回发给客户端,使用户得到及时的反馈。
 
代码很简单,很容易理解,注意两点:


1、在Default.aspx的Button的“Click”事件处理过程中,定义一个Session,存储一个标识和其他画面输入的数据,用于传递到Output.aspx页面,在Output.aspx页面上判断,只有该Session存在,并且标识正确的情况下,才使用Session保存的其他信息,来做那个传说中的大数据量的超复杂的业务运算;


2:在每次输出信息的时候,同时输出一行脚本,控制着的的垂直滚动条滚动到最底下,让用户不用拖动滚动条就可以看到最新的输出信息。
 
全部的代码如下:
 
Default.aspx
 
1.gif
2.gif
Code
3.gif
4.gif

5.gif

6.gif

7.gif

8.gif
9.gif

10.gif

11.gif

12.gif

13.gif
    Demo - HttpResponse.Flush 方法
14.gif

15.gif

16.gif
    
17.gif
        
18.gif
        
19.gif
            实行次数
20.gif
            
21.gif
            
22.gif
            
23.gif
            
24.gif
        
25.gif
    
26.gif

27.gif

28.gif
 
 
Output.aspx
 
29.gif
30.gif
Code



 
31.png

演示结果截图
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册