zoukankan      html  css  js  c++  java
  • asp.net 线程批量导入数据,ajax获取执行状态

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

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

     原文链接:http://www.cnblogs.com/LittleBai/p/6179183.html

    交流群:225443677 

  • 相关阅读:
    MySQL之SELECT用法
    Linux中find常见用法示例
    date命令
    backupMysql.sh
    Shell脚本中使用function(函数)示例
    zabbix邮件告警
    Zabbix系统数据采集方法总结
    TOMCAT原理详解及请求过程
    tomcat-users.xml 配置
    zabbix_sender用法实例
  • 原文地址:https://www.cnblogs.com/LittleBai/p/6179183.html
Copyright © 2011-2022 走看看