最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

asp.net线程批量导入数据时通过ajax获取执行状态

来源:动视网 责编:小采 时间:2020-11-27 22:36:05
文档

asp.net线程批量导入数据时通过ajax获取执行状态

asp.net线程批量导入数据时通过ajax获取执行状态:前言 最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能。 通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用sess
推荐度:
导读asp.net线程批量导入数据时通过ajax获取执行状态:前言 最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能。 通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用sess


前言

最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能。

通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用session里的执行状态,从而实现反馈导入状态的功能!

上代码: 前端页面

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>批量导入数据</title>
 <style type="text/css">
 .pop_body_con { width: 310px; position: fixed; top: 50%; left: 50%; margin-left: -150px; background: #eee; display:none; }
 .pop_body_con .pop_head { width: auto; padding: 10px 0; background: #fff; }
 .pop_body_con .pop_head a { display: block; color: #717274; font-size: 12px; text-decoration: none; text-align: center; }
 .pop_box { width: auto; overflow: hidden; padding: 45px 10px; }
 .pop_box .pop_text { float: left; }
 .pop_box .pop_text p { padding: 0; margin: 0; font-size: 12px; line-height: 18px; color: #717274;}
 .pop_box .progress_bar_con { float: left; width: 220px; position: relative; z-index: 2; }
 .pop_box .progress_bar_con p { margin: 0; padding: 0; font-size: 12px; color: #fff; line-height: 18px; width: 100%; 
 text-align: center; position: absolute; left: 0; top: 0; z-index: 4; }
 .pop_box .progress_bar_con .progress_bar_start { width: 100%; height: 18px; background: #C4C0C0; }
 .pop_box .progress_bar_con .progress_bar_end { width: 16%; height: 18px; background: #2bd35d; position: absolute; left: 0; top: 0; z-index: 3; }
 .pop_box .progress_bar_con { float: left; }
 #loading-mask { width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 0; background-color: rgba(0, 0, 0, 0.34902); display: none; }
 </style>
 <script src="ajax-master/jquery.js"></script>
 <script>
 var MyInterval;

 $(function () {
 $("#startImport").click(function () {
 MyInterval = setInterval(getState, 1000);
 });
 });
 
 function getState() {
 $.ajax({
 url: "test.aspx",
 type: "Post",
 data: { action: "getSession" },
 success: function (msg) {
 if (msg != "null") {
 msg = eval('(' + msg + ')');
 if (msg.being == 100) {
 setProcessBar(1, 1);
 $(".pop_body_con").hide();
 $("#loading-mask").hide();
 clearInterval(MyInterval);
 }
 else {
 $(".pop_body_con").show();
 $("#loading-mask").show();
 setProcessBar(msg.being, msg.count)
 }
 }
 }
 });
 }

 function setProcessBar(exeFlag, exeMax) {
 $("#progressbar_text").html(parseInt(roundFun(exeFlag / exeMax, 2) * 100) + "%");
 $("#progressbar_bar").attr("style", "width:" + parseInt(roundFun(exeFlag / exeMax, 2) * 100) + "%;");
 }

 function roundFun(number, X) {
 X = (!X ? 2 : X);
 return Math.round(number * Math.pow(10, X)) / Math.pow(10, X);
 }
 </script>
</head>
<body style="background-color: #fff;">
 <input id="startImport" type="button" value="导入数据" />
 <div id="loading-mask" ></div>
 <div class="pop_body_con">
 <div class="pop_head">
 <a href="javascript:;">正在导入…请勿操作!</a>
 </div>
 <div class="pop_box">
 <div class="pop_text">
 <p>导入进度:</p>
 </div>
 <div class="progress_bar_con">
 <p id="progressbar_text">0%</p>
 <div class="progress_bar_start"></div>
 <div class="progress_bar_end" id="progressbar_bar"></div>
 </div>
 </div>
 </div>
</body>
</html>

后台页面:

using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class test : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {
 string action = Request.Form["action"];
 if (!string.IsNullOrEmpty(action))
 {
 Hashtable temp = tmethod();
 if (temp == null)
 {
 Thread trd = new Thread(new ParameterizedThreadStart(insertData));
 trd.Start(action);
 }
 else
 {
 if (temp["reCode"].ToString() == "100")
 {
 
 Session.Remove("process");
 }
 }

 JavaScriptSerializer ser = new JavaScriptSerializer();
 String jsonStr = ser.Serialize(temp);
 Response.Write(jsonStr);
 Response.End();
 }
 }


 public Hashtable tmethod()
 {
 return (Hashtable)Session["process"];
 }

 private void insertData(object obj)
 {
 string action = obj.ToString();
 int tCount = 100;
 for (int i = 0; i < tCount; i++)
 {
 Hashtable stateHash = setStateVal(0, i, tCount, action);
 Session["process"] = stateHash; //存入session,方便共享执行状态
 Thread.Sleep(500);
 }
 Session["process"] = setStateVal(100, tCount, tCount, action);
 Thread.CurrentThread.Abort();
 }

 private Hashtable setStateVal(int code, int beingV, int CountV, string action)
 {
 Hashtable stateHash = new Hashtable();
 stateHash["reCode"] = code; //返回状态值
 stateHash["being"] = beingV; //正在执行值
 stateHash["count"] = CountV; //总值
 stateHash["action"] = action; //总值
 return stateHash;
 }
}

ok,共享完毕!

总结

文档

asp.net线程批量导入数据时通过ajax获取执行状态

asp.net线程批量导入数据时通过ajax获取执行状态:前言 最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能。 通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用sess
推荐度:
标签: 获取 数据 状态
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top