在日常开发中,我们的应用程序一般都是单线程的,这就导致了有些操作执行慢,比如导出文件,如果数据量比较大,又或者数据源是通过SAP拿到的,导出的时间肯定慢,这时候我们就能使用线程去解决这个问题;而线程分为两种,分别是带参数和不带参数,以下直接传参的方法:
string urlPath = HttpContext.Current.Request.ApplicationPath + "/阿巴巴巴巴巴/";
string physicPath = HttpContext.Current.Server.MapPath(urlPath);
string filter1 = filter + "@" + physicPath;
Thread childThread = new Thread(new ParameterizedThreadStart(ExportToExcel));
childThread.Start(filter1);
获取服务器上 ASP.NET 应用程序的虚拟应用程序根路径:HttpContext.Current.Request.ApplicationPath
返回与 Web 服务器上的指定虚拟路径相对应的物理文件路径
HttpContext.Current.Server.MapPath
根据虚拟路径返回一个物理路径
我不会一次传两个参数,只能把两个参数合成一个字符串当作一个参数传过去后在拆分了,至于为什么不在方法 ExportToExcel(object filter) 里获取虚拟路径和物理路径,那当然是因为使用了线程后的方法就不再是当前的 Http 请求了,这时候 HttpContext.Current is null 了,HttpContext.Current丢失,可以做个 try{}catch(Exception ex){} ,然后通过配置取得。而且参数只能是 object 类型。至于导出后,因为不会向再向当前请求输出是否保存文件,可以再添加一个界面,展示导出的内容,再加一个下载按钮,这时候相当于从服务器下载一个文件到本地,这样不就快多了吗,Nice!