当前位置: 首页 > news >正文

Ajax实现多任务指示器(附源码)

新年第一博,欢迎拍砖指正,不甚感激!

sample.jpg

1.       引言

通过Ajax刷新页面,该定制的Web控件用来显示连续的并且耗时长的任务处理进度。

用户在Web窗体上通过点击按钮来实现邮件的群发。为了加强系统的响应性,我想来显示每封邮件的发送进度,然后意识到这个想法也可以应用在很多多任务同时执行的环境中。

2.       实现

              我利用Anthem.NET库自定义该控件,使用Anthem.NET库原因有二:一是使用Javascript可以容易   调用服务器端的方法,二是自从我在许多项目中使用后,对Anthem.NET确实比较放心:)。使用该控   件不需要你熟悉Anthem.NET,但是如果你从没有接触过Anthem.NET,我建议你还是了解一下。

         为了让该控件完全容易定制,我用GridView控件作为其基类,所以你可以使用任意多的列和自己    所喜欢的风格。

3.       代码使用

由于该控件继承自GridView控件,所以你只能象使用GridView控件一样来使用它,但是还有附加的一些属性、事件和方法需要你掌握。

通过两种方式来显示进度和状态变化:图片和标签。你可以同时使用两种或者其中一种,这两个进度指示器与两个属性(ImageIDLabelID)相对应,这两个属性必须包含ImageLabel控件的ID。否则,你要把他们添加进去,如果不想用其中一个属性,尽可忽略之。

为了清楚起见,下面代码说明了该控件如何使用图像指示器。

 1 None.gif < MTI:MultiTaskIndicator runat = " server "  ID = " mtiTasks "  ImageID = " imgStatus "   
 2 None.gif    ProcessingImageURL = " images/ajaxloader.gif "  
 3 None.gif        TaskFinishedImageURL = " images/checked.gif "  
 4 None.gif    Width = " 350px "  AutoGenerateColumns = " false "  CancelButtonID = " btnCancel "   >
 5 None.gif     < HeaderStyle BackColor = " navy "  Font - Bold = " true "  ForeColor = " white "  
 6 None.gif        HorizontalAlign = " center "   />
 7 None.gif     < Columns >
 8 None.gif
 9 None.gif         < asp:TemplateField ItemStyle - HorizontalAlign = " Center " >
10 None.gif             < ItemTemplate >
11 None.gif                 < asp:Image runat = " server "  ID = " imgStatus "  
12 None.gif                    imageUrl = " images/arrow.gif "   />
13 None.gif             </ ItemTemplate >
14 None.gif         </ asp:TemplateField >
15 None.gif         < asp:BoundField DataField = " TaskName "  HeaderText = " Task "  
16 None.gif            ItemStyle - HorizontalAlign = " left "   />                 
17 None.gif     </ Columns >
18 None.gif
19 None.gif </ MTI:MultiTaskIndicator >
20 None.gif

我们需要注意如下属性:

l         ImageID对应于设计视图中Image控件的ID

l         ProcessingImageURL在任务执行过程中所显示图片的URL路径

l         TaskFinishedImageURL在任务执行结束后所显示图片的URL路径(该图片可通过编程来实现变化)

l         CancelButtonID如果窗体中使用取消按钮,应指明该按钮的ID

   现在,来让我们熟悉一下 Code-Bind 代码。

  
 1 None.gif protected   override   void  OnInit(EventArgs e)
 2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 3InBlock.gif    base.OnInit(e);
 4InBlock.gif    this.mtiTasks.ExecuteTask += 
 5InBlock.gif    new MultiTaskIndicator.MultiTaskIndicator.ExecuteTaskEventHandler(
 6InBlock.gif            mtiTasks_ExecuteTask);
 7InBlock.gif    this.mtiTasks.TaskEnded += 
 8InBlock.gif    new MultiTaskIndicator.MultiTaskIndicator.TaskEndedEventHandler(
 9InBlock.gif            mtiTasks_TaskEnded);
10InBlock.gif    this.mtiTasks.TaskStarted += 
11InBlock.gif    new MultiTaskIndicator.MultiTaskIndicator.TaskStartedEventHandler(
12InBlock.gif            mtiTasks_TaskStarted);
13ExpandedBlockEnd.gif}

14 None.gif

在执行任务前,我们需要把控件与数据源绑定,该数据源包含任意多代表任务的列表。

我们需要调用StartTasks方法来启动该进程。

   
1 None.gif void  btnStart_Click( object  sender, EventArgs e)
2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
3InBlock.gif    mtiTasks.StartTasks();
4ExpandedBlockEnd.gif}

5 None.gif

现在我们必须处理ExcuteTask事件以完成所需处理的任务,我们可通过MultiTaskIndicatorEventArgsUserData属性TaskEnded事件处理器传递一个参数。

   
 1 None.gif void  mtiTasks_ExecuteTask( object  sender, MultiTaskIndicatorEventArgs e)
 2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 3InBlock.gif    //This is where you execute the task.
 4InBlock.gif
 5InBlock.gif    //Notice the MultiTaskIndicatorEventArgs contains 
 6InBlock.gif
 7InBlock.gif    //the properties needed to identify the current task        
 8InBlock.gif
 9InBlock.gif    
10InBlock.gif    //demonstrates how to send data to the TaskEnded event handler
11InBlock.gif
12InBlock.gif    e.UserData = !(e.Row.RowIndex == 3 || e.Row.RowIndex == 8); 
13ExpandedBlockEnd.gif}

14 None.gif

对于基本的功能实现来说,这些已经足够了。但是我们还想根据任务的完成情况来修改其默认的行为。

   
 1 None.gif void  mtiTasks_TaskStarted( object  sender, MultiTaskIndicatorEventArgs e)
 2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 3InBlock.gif    e.CurrentBackColor = System.Drawing.Color.LightYellow;
 4ExpandedBlockEnd.gif}

 5 None.gif
 6 None.gif void  mtiTasks_TaskEnded( object  sender, MultiTaskIndicatorEventArgs e)
 7 ExpandedBlockStart.gifContractedBlock.gif dot.gif {    
 8InBlock.gif    //simulate a situation where we need to change the pre-defined image
 9InBlock.gif
10InBlock.gif    if (!Convert.ToBoolean(e.UserData))
11ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
12InBlock.gif        e.CurrentImageURL = "images/unchecked.gif";            
13InBlock.gif        e.CurrentBackColor = System.Drawing.Color.White;
14ExpandedSubBlockEnd.gif    }

15ExpandedBlockEnd.gif}

16 None.gif

1.       结语

我希望你会喜欢该控件,并下载把玩之:)。由于我的需求非常简单特殊,所以可能会没有囊括其他一些有意思的特色功能。但是我确信它完全能够灵活定制并重用于大多场合中。

源码下载

原文见:http://www.codeproject.com/KB/ajax/MultiTaskIndicator.aspx 版权归原作者所有。

相关文章:

  • 网管系统建设的思维转变
  • SAP XI 常用事务代码
  • 房子就要定了
  • 介绍几款所见即所得的WEB在线编辑器
  • CISCO路由器中的access-list(访问列表)
  • 以太网络建立多个VLAN典型案例
  • Windows 到 Linux 之旅: 第 9 部分. 安装软件
  • 3500xl ios恢复全过程
  • 30岁前不必在乎的30件事
  • CONVERSION_EXIT_ALPHA_OUTPUT
  • 图形系统的特点
  • 在vs2005下调用java axis webservice
  • [转载]淮北方言集锦
  • 可怕的互联网,未来智能生命第一原型—CSDN2008英雄会技术讲座有感
  • IDEAL (银行支付接口)如何搞定证书
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Git 使用集
  • HTTP请求重发
  • Java比较器对数组,集合排序
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • React as a UI Runtime(五、列表)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 订阅Forge Viewer所有的事件
  • 基于axios的vue插件,让http请求更简单
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何选择开源的机器学习框架?
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小程序 setData 学问多
  • 小程序测试方案初探
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 数据可视化之下发图实践
  • ​Python 3 新特性:类型注解
  • ​一些不规范的GTID使用场景
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #传输# #传输数据判断#
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (2020)Java后端开发----(面试题和笔试题)
  • (3)llvm ir转换过程
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Git) gitignore基础使用
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)fiber的基本认识
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十八)SpringBoot之发送QQ邮件
  • (转)ABI是什么
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件