使用ExtJS和ASP.NET创建实时进度条
4星 · 超过85%的资源 需积分: 25 68 浏览量
更新于2024-10-04
收藏 47KB DOC 举报
"这篇文章主要介绍了如何使用ExtJS和ASP.NET技术来实现在服务器端执行长时间操作时,页面上展示一个真实反映进度的进度条,从而提升用户体验。通过AJAX、ASP.NET WebService以及ExtJS的进度条控件,实现客户端与服务器端的交互,动态更新进度条状态。"
在开发Web应用程序时,遇到服务器端执行耗时操作的情况,实时反馈进度给用户可以显著提升用户体验。本文将详细阐述如何利用ExtJS和ASP.NET来构建这样一个实时进度条系统。
首先,我们需要对服务器端的长时间运行任务进行改造。在ASP.NET中,可以创建一个WebService方法来执行这些任务。例如,代码中的`ExecuteTimeConsumingTask`方法通过`HttpContext.Current.Request.UserHostAddress`作为唯一标识,确保每个用户只有一个任务在运行。同时,利用`Cache`对象和`Monitor`类来实现线程同步,避免同一用户并发执行多个任务。
```csharp
1: using System.Threading;
2: using System.Web;
3: using System.Web.Security;
...
5: public bool ExecuteTimeConsumingTask()
6: {
7: string processKey = HttpContext.Current.Request.UserHostAddress;
8: string threadLockKey = "thread" + HttpContext.Current.Request.UserHostAddress;
9: object threadLock = HttpContext.Current.Cache[threadLockKey];
...
17: // Only allow 1 running task per user.
18: if (!Monitor.TryEnter(threadLock))
19: {
20: return false; // Task already running for this user.
21: }
```
接下来,我们需要创建第二个WebService,用于客户端查询任务的进度。这个方法可以从`HttpContext.Current.Cache`中获取并返回进度信息。
然后,客户端使用ExtJS的Ajax功能发起异步请求,触发服务器端的长时间任务,并初始化进度条。ExtJS提供了丰富的UI组件,包括进度条控件,使得在JavaScript中创建和管理进度条变得简单。
```javascript
// 假设progressBar是预定义的ExtJS进度条实例
progressBar.show();
progressBar.updateProgress(0, '任务开始...'); // 初始化进度条
// 异步轮询服务器获取进度
var pollTask = function() {
Ext.Ajax.request({
url: 'progress.asmx/GetProgress',
success: function(response) {
var progress = JSON.parse(response.responseText).progress;
progressBar.updateProgress(progress, '进度: ' + progress + '%');
if (progress < 100) {
setTimeout(pollTask, 1000); // 每隔1秒检查一次
} else {
progressBar.hide(); // 任务完成,隐藏进度条
}
},
failure: function() {
// 错误处理
}
});
};
pollTask(); // 开始轮询
```
这个方案利用了客户端定期轮询服务器,获取任务进度,而不是采用服务器推送模式。虽然这可能会增加服务器的负担,但对于大多数情况,尤其是在不支持WebSocket或其他推送技术的环境中,这是一个可行且相对简单的解决方案。
总结,结合ExtJS的客户端界面能力和ASP.NET的服务器端处理,我们可以实现一个实时更新的进度条,让用户能够直观地了解后台任务的执行状态。这种设计提高了用户在等待过程中的满意度,减少了用户的焦虑感,提升了整体的用户体验。
136 浏览量
点击了解资源详情
点击了解资源详情
158 浏览量
109 浏览量
2009-06-06 上传
135 浏览量
157 浏览量
2013-04-18 上传
loveselience
- 粉丝: 2
- 资源: 15
最新资源
- DEV自定义控件,多按钮用户控件。包含新增,修改,删除,保存等
- Generative_CA:该项目包含使用生成模型继续验证来自H-MOG日期集的运动传感器数据的实现
- restafari,.zip
- Office补丁解决“由于控件不能创建,不能退出设计模式”
- 直流电机PID学习套件1.0,c语言词法分析生成器源码,c语言
- 设计世界
- 单片机防火防盗防漏水仿真protues
- Milestone_three
- matrixmultiplication:c中两个矩阵的乘法
- 易语言窗体设计原代码
- AVL-Tree,c语言游戏源码及素材,c语言
- IOS应用源码之【应用】Skin or Blob Detection(皮肤检测).rar
- openWMail:社区运行wmail的分支-https:github.comThomas101wmail
- basysr:文件pertama
- geomajas-client-common-gwt-command-2.0.0.zip
- DxAutoInstaller-souce.zip