class InputFromExcelSheet
    {
   /// <summary>
   ///   根据Excel获取单张sheet的数据到datatable;
   /// </summary>
   /// <param name=""></param>
   /// <returns></returns>
        public DataTable ExcelFromSheet(int i,string filename)
        {
            DataTable dt = new DataTable();
            Workbook xls = new Workbook(filename);//第三方插件 aspose.cells;
            
            Worksheet sheet = xls.Worksheets[i];            int firstRow = 1, firstColumn = 0, totalRows = 0, totalColumns = 0;
            totalRows = sheet.Cells.Rows.Count-1;
            totalColumns = sheet.Cells.MaxColumn + 1;            if (totalRows==0)
            {
                string str = string.Format("所选Excel文件的第{0}张Sheet为空表单,请填写数据后再导入!!!", i);
                MessageBox.Show(str);
                return null; 
            }
            else
            {
                dt = sheet.Cells.ExportDataTableAsString(firstRow, firstColumn, totalRows, totalColumns);//要以字符串的格式导入到datatable中去;否则按第一行的格式导入
                return dt;            }
            
        }
    }class ExcelHelper
    {
        
     
        public DataSet ds_Excel;//Excel的12张sheet的数据导入到内存dataset 
      
        public InputFromExcelSheet ipfe;//定义一个对象用来获取不同sheet中的数据到ds_excel数据集;
         
        OpenFileDialog ofd = new OpenFileDialog(); /// <summary>
        ///   获取Excel中12张sheet的内容到ds_excel中;
        /// </summary>
        /// <param name=""></param>
        /// <returns>是否获取数据成功;</returns>
        /// 
        public bool GetExcelData()
        {
            
            ofd.InitialDirectory = Application.ExecutablePath;
            ofd.Filter = "Excel2003格式(*.xls)|*.xls|Excel2007格式(*.xlsx)|*.xlsx";
            ofd.FilterIndex = 1;
            ofd.RestoreDirectory = true;
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                Workbook xls = new Workbook(ofd.FileName);//第三方插件                if (xls.Worksheets.Count == 12)
                {
                    using (BackgroundWorker worker = new BackgroundWorker())
                    {
                        ProgressLoading state = new ProgressLoading();//ProgressLoading 是进度条
                        state.Show();
                        worker.WorkerReportsProgress = true;
                        worker.WorkerSupportsCancellation = true;                        //添加事件
                        worker.DoWork += new DoWorkEventHandler(worker_DoWork_DaoRu);
                        worker.ProgressChanged += new ProgressChangedEventHandler(state.ProgressChanged);
                        worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(state.RunWorkerCompleted);
                        worker.RunWorkerAsync();                    }
                    return true;
                }
                else
                {
                    MessageBox.Show("所选Excel文件的不是12张sheet,请重新选择正确的导入文件;", "注意", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return false;
                }            }
            else
                return false;
                
                        }
        void  worker_DoWork_DaoRu(object sender, DoWorkEventArgs e)
        {            using (BackgroundWorker worker = sender as BackgroundWorker)
            {                for (int i = 0; i < 12;i++ )
                {
                    AddDataTable(i);
                    string currentstate = "正在导入第" +(i+1).ToString()+ "张表";
                    worker.ReportProgress(i, currentstate);
                   // Thread.Sleep(0);
                }
              
            }                        // throw new Exception("The method or operation is not implemented.");
        }        private void AddDataTable(int i)
        {
                    
                DataTable dt;
                dt = ipfe.ExcelFromSheet(i, ofd.FileName);
                if (dt != null)
                {
                    ds_Excel.Tables.Add(dt.Copy());
                }
                else
                    MessageBox.Show("有空表!!");
           
        }
}public partial class Excel : Form
    { ExcelHelper eh = new ExcelHelper(); private void btnRead_Click(object sender, EventArgs e)
        {
            eh.GetExcelData();
         
            int a = eh.ExcelDataSet.Tables.Count;
            if (eh.ExcelDataSet.Tables.Count > 0)
            {
                dataGridViewRead1.DataSource = eh.ExcelDataSet.Tables[0];
                dataGridViewRead2.DataSource = eh.ds_Excel.Tables[1];
                dataGridViewRead3.DataSource = eh.ds_Excel.Tables[2];
                dataGridViewRead4.DataSource = eh.ds_Excel.Tables[3];
                dataGridViewRead5.DataSource = eh.ds_Excel.Tables[4];
                dataGridViewRead6.DataSource = eh.ds_Excel.Tables[5];
                dataGridViewRead7.DataSource = eh.ds_Excel.Tables[6];
                dataGridViewRead8.DataSource = eh.ds_Excel.Tables[7];
                dataGridViewRead9.DataSource = eh.ds_Excel.Tables[8];
                dataGridViewRead10.DataSource = eh.ds_Excel.Tables[9];
                dataGridViewRead11.DataSource = eh.ds_Excel.Tables[10];
                dataGridViewRead12.DataSource = eh.ds_Excel.Tables[11];            }
            
        
            
            
            
        }
}
第一个类是用来从Excel中获取一张Sheet的数据;
第二个类是从一个含有12张Sheet的Excel文件取数据,然后放到该类的DataSet 变量ds_Excel中;
第三个类是创建以个ExcelHelper 对象,然后取ds_Excel的数据在dataGridView显示;我的问题是,在第二个类中加入了BackgroundWorker后,第三个类就获取不到ds_Excel的数据,或者说,在第二个类的Dowork的实现函数中加入sleep(200)后,就没有数据了,请问高手如何解决???