导出Excel 或 大量耗时计算时,前端界面保持可操作

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WinformTest
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        #region 运用线程
        /// <summary>
        /// 导出Excel或其他耗时计算
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExport_Click(object sender, EventArgs e)
        {
            //显示正在计算的动画
            this.pictureBox1.Visible = true;
            //启用另一个线程,完成导出
            Thread t = new Thread(new ParameterizedThreadStart(Export));
            t.Start("sql where");
        }
        /// <summary>
        /// 这里以有参举例
        /// </summary>
        /// <param name="strWhere"></param>
        private void Export(object strWhere)
        {
            Thread.Sleep(1000);
            this.Invoke(new Action(UpdateUI));
        }
        private void UpdateUI()
        {
            this.pictureBox1.Visible = false;
        }
        #endregion

        #region 运用线程池,同时有返回值
        private void btnExportAnother_Click(object sender, EventArgs e)
        {
            //显示正在计算的动画
            this.pictureBox1.Visible = true;
            //使用线程池,来完成导出
            WaitCallback wc = new WaitCallback(this.ExportExcel);
            ThreadPool.QueueUserWorkItem(wc, "sql where");
        }
        private void ExportExcel(object sql)
        {
            Thread.Sleep(1000);
            //这里还以有参举例
            object result = this.Invoke(new Func<int, int>(GetNumber), 11);
            MessageBox.Show(result + "");
        }
        private int GetNumber(int num)
        {
            this.pictureBox1.Visible = false;
            return 1111;
        }
        #endregion

        private void btnTest_Click(object sender, EventArgs e)
        {
            MessageBox.Show("能操作界面");
        }

    }
}

源代码

时间: 2024-11-06 09:51:55

导出Excel 或 大量耗时计算时,前端界面保持可操作的相关文章

Windows 2008 R2 导出Excel时提示:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。

第一次看到这个错误,首先考虑是不是需要在服务器上面安装Office,其实不需要. Win2008系统采用的是64位,而我们引用的Excel组件却是32位的,翻阅了度娘后,得到如下解决方案,具体操作过程如下: 1.打开IIS(开始--运行--inetmgr回车) 2.定位到"应用程序池",找到相应站点的应用程序池,比如,我的应用程序池是:sungrowpower 3.点击上图右侧"高级设置",弹出如下所示界面,将其中的"启用32位应用程序",设置为

导出EXCEL数据时防止数值变科学计数的办法

网上有很多说法,最简单直接正确的做法是判断一下是否为数值以及长度,然后给单元格加上以下CSS即可: mso-generic-font-family:auto;   mso-font-charset:134;    mso-number-format:"\@";   mso-background-source:auto;   mso-pattern:auto; 这个办法我是从:http://www.cnblogs.com/joinger/articles/1322931.html 这个博

前端导出Excel兼容写法

今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容. 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源,导出的写法也是不相同的. 技术方案 IE 无论数据来源是哪里,都是用ActiveXObject对象及相关的命令,IE10.11有点不同. 非IE 纯数据的,使用一个FileSaver.js,如果有浏览器不支持Blob的,还需要引入Blob.js,来做导出. HTML内容的,构造一个base64www

关于PHPExcel导出Excel时身份证,数字会导出为科学计数的处理方法

原文:关于PHPExcel导出Excel时身份证,数字会导出为科学计数的处理方法 上次在开发一个项目时,用到PHPExcel导出数据,其中有导出身份证等长串数字时导出的Excel中显示为科学计数方式. 这种显示很不人性化而且量多了修改起来也很麻烦. 这是因为Excel处理数字里默认数字太长会转化为科学计数法,处理起来很简单,我们在导出时把数字转为字符串,Excel就不会识别为数字了,也就不会显示为科学计数方式. 我的处理方式是在变量后面加个空格,简单方便. $usercode .= ' '; $

CRM报表导出excel时指定sheet名

如图所示,设置PageName即可: 这样导出excel时,sheet的名就有了:

CxGrid导出Excel时清除颜色的设置

CxGrid导出Excel时清除颜色的设置 (2011-04-25 16:33:23) 转载▼ 标签: it 分类: Delphi http://www.radxe.com/?p=170 cxgrid导出到Excel是"所见即所得"模式的,应用程序中显示的颜色在导出时也会被设置到Excel,但很多时候导出的Excel是期望不包含色彩信息的,所以必须在导出时将cxgrid的颜色设置清除.cxgrid表格各个部分的颜色可以通过在view的styles中设置,未设置styles时cxgrid

用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)

做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号“2546541656596”,excel会自动变成科学计数法... 弄过好几次都没有解决,最近又要导出excel了,下决心一定要找到解决办法 自己在excel里测试过,较长的数字,都会自动变成科学计数法,除非我们把单元格格式设置成“文本型” 哈哈,似乎找到了思路:用poi先把单元格设置成“文本型”就可以了把. 从文档里找到了这个方法HSSFCell.setCellType(int type),怎么看这个方法都

CRM 报表导出excel时指定sheet名

如图所示,设置PageName即可: 这样导出excel时,sheet的名就有了:

导出excel时,以form方式提交json数据

今天在写项目时写到一个excel的导出,开始想用ajax请求后台后导出,但发现ajax会有返回值,而且ajax无法直接输出文件,而后台的excel导出方法已经封装好,不方便修改. 就改用了提交的方式form,但form提交,表格分页用的是jquerytable,我需要将一些jquerytable的一些参数传到后台,但这些数据已经是json数据,如果我直接放在input中提交到后台在解析参数会很麻烦,所以就想将json数据转为form方式提交. js //导出 function exportExc