一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2016-12-30 编辑:简简单单 来源:一聚教程网

前言

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

通过线程执行导入,并把正在执行的状态存入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; }
 
 
 
 
 
 
  
   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,共享完毕!

热门栏目