| 首页 | IT动态 | 硬件 | 应用 | 互联网 | 网络 | 网站 | 黑客 | 编程 | 数码 | 视频教程 | 游戏 | 休闲 | 软件 | 视频 | IT认证 | 动漫图片 | IT杂谈 | 论坛 | 
Google
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • CSS的“顶级”技巧

  • css滑动门技术的一些总结和归…

  • DIV与Table布局在大型网站的…

  • 用css样式表实现首字大写特效

  • 网站设计之合理架构css

  • 认清CSS的类class和标识id选…

  • 常用CSS缩写语法总结

  • CSS编写攻略

  • 技巧运用无极限 HTML表格使用…

  • HTML中小meta的大作用

  • 广 告 位 置
    黄金广告位
    Q
    您现在的位置: 无忧IT人 >> 网站 >> ASP.NET >> 文章正文
    使用ASP.NET Atlas编写显示真实进度的ProgressBar       
    使用ASP.NET Atlas编写显示真实进度的ProgressBar
    作者:网络 文章来源:转载 点击数: 更新时间:2006-4-9
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:
    英文版见:http://dflying.dflying.net/1/archive/100_building_a_real_time_progressbar_using_aspnet_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;
     5    string threadLockKey = "thread" + this.Context.Request.UserHostAddress;
     6    object threadLock = this.Context.Cache[threadLockKey];
     7    if (threadLock == null)
     8    {
     9        threadLock = new object();
    10        this.Context.Cache[threadLockKey] = threadLock;
    11    }
    12
    13    // Only allow 1 running task per user.
    14    if (!Monitor.TryEnter(threadLock, 0))
    15        return -1;
    16
    17    DateTime startTime = DateTime.Now;
    18
    19    // Simulate a time-consuming task.
    20    for (int i = 1; i <= 100; i++)
    21    {
    22        // Update the progress for this task.
    23        this.Context.Cache[processKey] = i;
    24        Thread.Sleep(70);
    25    }
    26
    27    Monitor.Exit(threadLock);
    28
    29    return (DateTime.Now - startTime).Seconds;
    30}
    31
     

    [1] [2] [3] [4] [5] 下一页  

    文章录入:51iter    责任编辑:51iter 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |