找回密码
 注册
搜索
热搜: 回贴

ASP.net:WEB应用程序中的进度条

2009-12-13 13:39| 发布者: admin| 查看: 46| 评论: 0|原作者: 慕容紫英

○谁说在WEB应用程序中不能使用进度条?我......


谁说在WEB应用程序中不能使用进度条?我认为能。本文将介绍在服务端长时间的处理过程中通过使用进度条提高WEB应用程序的质量和界面友好度。事实上,如果一个WEB应用程序一直运行在无状态和无连接状态下,用户很容易认为事情已经结束了。但是本文介绍的不使用任何ActiveX控件和乱七八糟的Java Applets的进度条将有助于改善这点。
  在一个WEB应用程序中能够使用进度条的关键是浏览器有能力在所有页面加载完之前显示页面。我们将使用这点特性来有步骤的生成并且发送页面给客户端。首先,我们将使用HTML生成一个完美并且漂亮的进度条,然后我们动态的发送Javascript块以更新进度条。当然,以上的所有内容都是在断开用户请求之前实现的。在C#中,Response.Write允许我们加入自定义内容到缓存区并且Response.Fluse()允许我们把所有缓存区中的内容发送到用户的浏览器上。
  第一步:让我们来建立一个进度条页面,我们使用progressbar.aspx。如上所述,我们逐步生成并发送页面到客户端。首先,我们将使用HTML生成一个完美并且漂亮的进度条。所需要的HTML代码我们可以从事先定义的progressbar.htm中获取,所以,第一件事情是装载它并且将数据流发送到客户端的浏览器,在progressbar.aspx的Page_Load中加入如下几行:
string strFileName = Path.Combine( Server.MapPath("./include"), "progressbar.htm" );
StreamReader sr = new StreamReader( strFileName, System.Text.Encoding.Default );
string strHtml = sr.ReadToEnd();
Response.Write( strHtml );
sr.Close();
Response.Flush();
以下是progressbar.htm的HTML代码,(译注:作者把脚本函数放在了另外一个js文件中,但我嫌麻烦就也放在了这个静态页面中了)




















  对应的CSS定义如下:
.bi-loading-status {
/*position: absolute;*/
width: 150px;
padding: 1px;
overflow: hidden;
}
.bi-loading-status .text {
white-space: nowrap;
overflow: hidden;
width: 100%;
text-overflow: ellipsis;
padding: 1px;
}
.bi-loading-status .progress-bar {
border: 1px solid ThreeDShadow;
background: window;
height: 10px;
width: 100%;
padding: 1px;
overflow: hidden;
}
.bi-loading-status .progress-bar div {
background: Highlight;
overflow: hidden;
height: 100%;
filter: Alpha(Opacity=0, FinishOpacity=100, Style=1, StartX=0, StartY=0, FinishX=100, FinishY=0);
}
  第二步:现在我们可以开始更新进度条了,这是十分重要的部分,因为这部分可以令你的进度条活起来。(译注,原来是使用随机的增加15次直到加载完毕,本文仅使用从1-100的匀速增加,以下内容非译)
  首先我们新开一个线程,在Page_Load 中加入以下代码:
Thread thread = new Thread( new ThreadStart(ThreadProc) );
thread.Start();
thread.Join();
  在类中增加以下函数:
private void ThreadProc()
{
string strScript = "";
for ( int i = 0; i <= 100; i++ )
{
System.Threading.Thread.Sleep(10);
Response.Write( string.Format( strScript, i ) );
Response.Flush();
}
}
  注意,在以上代码中我们使用for循环,在i每增加一次的情况下往客户端发送一段脚本,其中的{0}会被相应的i替换,而该段脚本会调用预先写好的javascript函数setPgb,更改页面的进度条状态。

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 21:23 , Processed in 0.209907 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部