本文实例讲述了JS + WCF实现进度条实时监测数据加载量的方法。分享给大家供大家参考,具体如下:
由于项目中需要导入大量数据到memcache中
需要用WCF调取11万条数据,由于那边多级联查和排序,所以比较慢(1分钟左右)
同时这边需要对数据进行处理,合并成2万条数据,然后存储,需要一定时间(也是1分钟左右)
总之,完成这个数据导入一共需要1分30秒左右
这时候,需要一个进度条来实时监测完成的数据量
(之前用的是一个动态图,不能知道程序目前的完成量,甚至不知道它是不是卡住了,只能等着)
1。开辟线程,用于加载数据,处理数据
2 .前台实时读取后台数据,并显示
查看html
@ *数据准备进度条* @ & lt; div id=叭萜鳌北? & lt; div类=澳谌荨北? & lt; h2>数据准备& lt;/h2> & lt;/div> & lt; !——进度条在 & lt; div id=" progress_bar " class=" ui-progress-bar ui-container”比; & lt; div类=皍i-progress”比; & lt;跨类=" uilabel "祝辞完成量& lt; b类=凹壑怠痹?% & lt;/b> & lt;/span> & lt;/div> & lt;/div> & lt; !——/进度条——比; & lt; div类="内容" id=癿ain_content”比; & lt; p>数据准备完成! & lt;/p> & lt;/div> & lt;/div> >之前view-js
$(函数(){ $(" #初始化”)。点击(函数(){ .messager美元。确认(“提示”、“是否要进行数据初始化?”,函数(r) { 如果(r) { 返回; } 其他{ $(" #容器”),告诉(); var t1=窗口。setInterval (process_bar, 1500); } }); }); }); 函数process_bar () { . ajax({美元 类型:“文章”, 异步:没错, url:“/纸/LoadData”, 成功:函数(结果){ $ (" # progress_bar .ui-progress”) .animateProgress(结果); 如果结果==" 100 "){ $ (' # main_content ') .slideDown (); $ (' # fork_me ') .fadeIn (); setTimeout(函数(){$(“#容器”)hide ();;},1500); window.clearInterval (t1); } } }) } >之前 控制器
静态bool国旗=true; 公共int LoadData () { int结果=Ipaperbll.LoadDataAmount (); 如果(国旗) { 线程的线程=新线程(新ThreadStart (ThreadLoadData)); thread.Start (); 国旗=false; } 返回结果; } 私人空间ThreadLoadData () { Ipaperbll.initializeData (); } >之前后台
静态int load_data_amount;//当前数据准备量 公共bool initializeData () { bool国旗=false;//定义返回值//获得数据//代码........代码.... load_data_amount=5;//完成工作量 int页面=0; int金额=50000;//一次获取数据量不能超10过万 而(*金额==list.Count页) {//代码........代码.... load_data_amount=load_data_amount + 5; } load_data_amount=50;//读取数据默认的工作量 双totalamount=list.Count (); foreach (var项列表) {//代码........代码.... load_data_amount=转换。ToInt32 ((1 - (totalamount——)/double.Parse (list.Count () .ToString())) * 50) + 50;//根据数据改变的完成工作量 } load_data_amount=100;//完成工作量 国旗=true; 返回国旗; }//返回当前准备数据量 公共int LoadDataAmount () { 返回load_data_amount; } >之前
<强> 1。进度条生成强>
解决:使用网上的演示,css + js可以动态生成,改变数据即可
<强> 2。线程问题强>
解决:开始是监测使用线程,后来改成处理数据使用线程
<强> 3。实时监测问题强>
解决:处理数据使用线程自动运行,前台使用ajax不断查询后台的一个变量load_data_amount
<强> 4. ajax报错问题强>
注意是返回值的类型,以及是结果还是result.d,不同情况下是不一样的
<强> 5。数据类型问题强>
解决:读取数据完成的百分比,是用完成量/所有量得到的,这里的数一直算不对,是因为int类型承受不住11万的运算以及之后的小数,用双和浮动可以
JS + WCF实现进度条实时监测数据加载量的方法详解