--------------------------------------------------------------后台代码------------------------------------------

    public JsonResult ImportPDF(Int64 id)
        {
            try
            {
                Guid currentGuid = Guid.NewGuid();

if (Request.Files["FileData"].HasFile())
                {
                    HttpPostedFileBase file = Request.Files["FileData"];
                    //if (file.InputStream.Length > 16*1024*1024)
                    //{
                    //    throw new Exception("文件过大,导入不成功!");
                    //}
                    CreateFolder();
                    string path = Server.MapPath("/Ebook");
                    string fileName = "1.pdf";

//Directory.CreateDirectory(path);
                    file.SaveAs(string.Format(@"{0}\{1}", path, fileName));
                    PDFText(string.Format(@"{0}\{1}", path, fileName), id, currentGuid);
                }

return Json(currentGuid.ToString(), JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            
        }

/// <summary>
        /// 获取导入PDF的进度
        /// </summary>
        /// <returns></returns>
        public JsonResult GetPdfProgress(string guidStr)
        {
            try
            {
                Guid guid = new Guid(guidStr.Trim('"'));
                if (pdfProDic.ContainsKey(guid))
                {
                    return Json(new { guidKey = guidStr, proVal = pdfProDic[guid] }, JsonRequestBehavior.AllowGet);
                }
                return Json(new {guidKey = guidStr}, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                throw ex;
            }

}
        
        //注意要使用静态(字典与GUID为了应对多人同时访问)
        static Dictionary<Guid,int> pdfProDic=new Dictionary<Guid, int>();
        
        public void PDFText(string fileName, Int64 id,Guid guid)
        {
            System.Threading.Tasks.Task.Factory.StartNew(user =>
            {
                try
                {
                    pdfProDic.Add(guid,0);
                    Domain.UserModel.User currentUser = user as Domain.UserModel.User;
                    if (user != null)
                    {
                        #region 执行pdf导入数据库
                        //注意加载PDF文件过大会出错
                        PDDocument doc = PDDocument.load(fileName);
                        PDFTextStripper pdfStripper = new PDFTextStripper();

short currentPage = GetMaxPageNumber(id);

if (currentPage < 10000)
                            currentPage = 10000;

float j = 0;
                        int progress = 0;
                        for (int i = 0; i < doc.getNumberOfPages(); i++)
                        {
                            currentPage++;

//索引是从0开始,第一页表示0~1
                            pdfStripper.setStartPage(i);
                            pdfStripper.setEndPage(i + 1);
                            String pdfStr = pdfStripper.getText(doc);

var target = EntAppFrameWorkContext.Application.ExtenedT<Ebook, Int64, EbookAppExt>().
                                CreatePage(
                                    id,
                                    currentPage,
                                    pdfStr,
                                    currentUser);
                            j = i+1;
                            progress = (int)((j / doc.getNumberOfPages()) * 100);
                            if (Convert.ToInt32(j) >= doc.getNumberOfPages())
                            {
                                progress = 100;
                                //为了性能的提升,这时候进行排序
                                EntAppFrameWorkContext.Application.ExtenedT<Ebook,Int64,EbookAppExt>().InitEbookPage(id);
                            }
                            pdfProDic[guid] = progress;
                        }
                        doc.close();
                        #endregion
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                
            }, base.CurrentUser);
            
        }

Threading.Tasks.Task多线程 静态全局变量(字典) --只为了记录的更多相关文章

  1. System.Threading.Tasks.Task 引起的 IIS 应用池崩溃

    接口服务运行一段时间后,IIS应用池就会突然挂掉,事件查看日志,会有事件日志Event ID为5011的错误 为应用程序池“PokeIn”提供服务的进程在与 Windows Process Activ ...

  2. System.Threading.Tasks.Task引起的IIS应用程序池崩溃

    问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状态,Web服务器无响应. 2. 从服务器端看(Windows Server 2008 + IIS 7.0 ...

  3. System.Threading.Tasks.Task 任务引起的IIS应用程序池崩溃

    转载:http://www.cnblogs.com/aaa6818162/p/4421305.html 问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状 ...

  4. threading.local()、多线程里全局变量锁

    这个人的系列文章值得一读:http://blog.51cto.com/suhaozhi/category3.html/p2,不过这个系列总共15偏,Python并发入门,有很多文字描述错误,有些道理也 ...

  5. 转载 Net多线程编程—System.Threading.Tasks.Parallel

    .Net多线程编程—System.Threading.Tasks.Parallel   System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Paral ...

  6. .Net多线程编程—System.Threading.Tasks.Parallel

    System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...

  7. System.Threading.Tasks

    前言: 我们之前介绍了两种构建多线程软件的编程技术(使用异步委托或通过System.Threading的成员).这两个可以在任何版本的.NET平台工作. 关于System.Threading 的介绍 ...

  8. 静态局部变量、静态全局变量、extern全局变量、自动变量 札记

    静态局部变量 静态局部变量. 从称呼上我们可以看出,静态局部变量首先是一个局部变量,因此其只在定义它的函数内有效,冠以静态的头衔后,其生存期就被延长了,不会随着函数的返回而被撤销.我们可以这样来理解: ...

  9. Python:使用threading模块实现多线程编程

    转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...

随机推荐

  1. iOS - MVC 架构模式

    1.MVC 从字面意思来理解,MVC 即 Modal View Controller(模型 视图 控制器),是 Xerox PARC 在 20 世纪 80 年代为编程语言 Smalltalk-80 发 ...

  2. JAVA 大数据内存耗用测试

    JAVA 大数据内存耗用测试import java.lang.management.ManagementFactory;import java.lang.management.MemoryMXBean ...

  3. 内部使用final参数的原因

    局部内部类(即:定义在方法中的内部类),访问方法中的局部变量 : 局部变量的生命周期与对象的生命周期的不一致性!方法在执行完方法的局部变量就消失,而内部类如果有引用还是存在的,那么将找不到变量.此时设 ...

  4. KMPlayer

    1. KMP 播放时,有声无图像,黑屏.解决: 打开KMP然后右键-选项-参数设置(或者进入KMP直接按F2)-视频处理-右边选择“渲染器”-在“渲染器”中选择“VMR9 未渲染 (HQ字幕)”-选中 ...

  5. web设计经验<七>13步打造优雅的WEB字体

    今天,大多数浏览器已经默认支持Web字体,日趋增多的字体特性被嵌入最新版HTML和CSS标准中,Web字体即将迎来一个趋于复杂的崭新时代.下面是一些基本的关于字体的规则,特别适用于Web字体. 原文地 ...

  6. Android activity四种基本启动模式

    standard:默认的模式,每次启动会新创建一个activity对象 singleTop:在当前任务栈中,判断栈顶是否为当前的activity,如果是,就直接使用,如果不是,就会创建新的activi ...

  7. HTML5Canvas标签

     

  8. JavaWeb 7 Servlet

    7 Servlet Servlet学习的大纲:1. servlet概念及相关接口简介2. servet 执行过程3. servlet路径映射4. 缺省servlet          --应用5. s ...

  9. Java 中使用 UEditor 整理【待续。。。】

    1.简介 官网:http://ueditor.baidu.com/website/index.html 演示:http://ueditor.baidu.com/website/examples/ 2. ...

  10. 聊天界面之气泡文本cell(一)

    在实现qq聊天界面的过程中,使用UITableViewCell碰到了不少问题,这里还是记录一下以免遗忘. 气泡聊天cell的实现,网上最多的方法还是: 1.手动计算设置frame的值,文本的size使 ...