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

更新时间:2020-12-19    来源:邮件处理    手机版     字体:

【www.bbyears.com--邮件处理】

前言

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

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

上代码: 前端页面

   代码如下    批量导入数据     .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; }    <scriptsrc="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>             javascript:;">正在导入…请勿操作!               

导入进度:

            0%

                    

后台页面:

   代码如下 usingSystem.Linq; usingSystem.Threading; usingSystem.Web; usingSystem.Web.Script.Serialization; usingSystem.Web.UI; usingSystem.Web.UI.WebControls;   publicpartialclasstest : System.Web.UI.Page {  protectedvoidPage_Load(objectsender, EventArgs e)  {   stringaction = Request.Form["action"];   if(!string.IsNullOrEmpty(action))   {    Hashtable temp = tmethod();    if(temp ==null)    {     Thread trd =newThread(newParameterizedThreadStart(insertData));     trd.Start(action);    }    else    {     if(temp["reCode"].ToString() =="100")     {             Session.Remove("process");     }    }      JavaScriptSerializer ser =newJavaScriptSerializer();    String jsonStr = ser.Serialize(temp);    Response.Write(jsonStr);    Response.End();   }  }      publicHashtable tmethod()  {   return(Hashtable)Session["process"];  }    privatevoidinsertData(objectobj)  {   stringaction = obj.ToString();   inttCount = 100;   for(inti = 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();  }    privateHashtable setStateVal(intcode,intbeingV,intCountV,stringaction)  {   Hashtable stateHash =newHashtable();   stateHash["reCode"] = code;//返回状态值   stateHash["being"] = beingV; //正在执行值   stateHash["count"] = CountV; //总值   stateHash["action"] = action; //总值   returnstateHash;  } }  

ok,共享完毕!

本文来源:http://www.bbyears.com/jiaocheng/117336.html

热门标签

更多>>

本类排行