英文版见:http://dflying.dflying.net/1/archive/100_building_a_real_time_progressbar_using_as.net_atlas.html
当后台在进行某些长时间的操作时,如果能在页面上提供一个显示真实进度的进度条,而不是让用户不知情的等待或是从前的那些简单的估计,将是一个非常难得的出彩之处。现在使用asp.net atlas完全有可能做到这些。这篇文章将讨论如何完成这一功能并介绍一些有关atlas客户端控件开发的基本概念。您同时可以在这里下载示例程序以及源文件。
实现网页上的进度条想法其实很简单:编写一个客户端的atlas控件,每隔一段时间请求一次服务器,并使用返回的当前进度数据更新进度条的显示。在这个示例中,将有四个部分的代码组成:
一个需要较长时间才能完成的web service
一个用来查询上述web service进度的web service
客户端atlas进度条(progressbar)控件,负责维护客户端逻辑并输出可视化ui。这也是本示例中最重要的一个组件,在将来可被重用于其他页面或程序的开发
包含上述web service以及控件的asp.net测试页面
下面我们一步一步地来实现以上四个步骤:
需要较长时间完成的web service
在实际的程序中,一个需要较长时间完成的web service可能有如下声明:
1[webmethod]
2public void timeconsumingtask()
3{
4 connecttodatabase();
5 getsomevaluefromdatabase();
6 copysomefilesfromdisk();
7 getaremotefile();
8}
这样我们就可以插入一些辅助方法来确定当前进度完成情况,setprogress(int)用来设定当前的进度完成百分比:
1[webmethod]
2public void timeconsumingtask()
3{
4 setprogress(0);
5 connecttodatabase();
6 setprogress(10);
7 getsomevaluefromdatabase();
8 setprogress(40);
9 copysomefilesfromdisk();
10 setprogress(50);
11 getaremotefile();
12 setprogress(100);
13}
在本示例中,我们仅仅使用cache来储存进度完成信息并利用thread.sleep()方法模拟操作的延迟:
1[webmethod]
2public int starttimeconsumingtask()
3{
4 string processkey = this.context.request.userhostaddress;
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器