private void btnOK_Click(object sender, EventArgs e)
        {
            if (rbtnAAR.Checked)
            {
                ImportThread();//最耗时间的
                ClealAllControl();
            }
            else
            {
                ImportExcel();
                ClealAllControl();
            }
        }
  #region begion Inport
        bool isAAR = false;
        private void ImportThread()
        {
            DateTime t1 = DateTime.Now;
            ImportPrintMileage.isRunning = true;
            (new BLLManager()).Init_InsertEmpty();            bool IsImport = false;
            bool isPrint = false;
            isAAR = this.rbtnAAR.Checked;
            IsImport = this.chkImport.Checked;
            isPrint = this.chkPrint.Checked;            #region for AAR
            if (isAAR)
            {
                #region import AAR
                string s0000 = Guid.Empty.ToString();
                if (chkImport.Checked == true)
                {
                    string file = string.Empty;
                    OpenFileDialog fileDialog1 = new OpenFileDialog();
                    fileDialog1.Filter = "dat files (*.dat)|*.dat";
                    fileDialog1.FilterIndex = 1;
                    fileDialog1.RestoreDirectory = true;
                    if (fileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        file = fileDialog1.FileName;
                    }
                    else
                    {
                        return;
                    }                    if (File.Exists(file) == false)
                    {
                        MessageBox.Show("'" + file + "'" + " not exist.", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }                    CarHireManager cm = new CarHireManager();
                    List<CarHireInfo> list = new List<CarHireInfo>();//
                    try
                    {                        list = (cm).GetListForDATfile(file);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Please check '" + file + "'  ", "File data error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }                    this.btnOK.Refresh();
                    this.btnCancel.Refresh();
                    this.txtInvoiceNo_CheckNum.Refresh();
                    this.label4.Refresh();
                    cm.InsertCarHireForAAR(list);
                }                #endregion                if (IsImport)
                {
                    MessageBox.Show("begion inport!");
                    this.UpdStMile();
                    this.UpdAAREql();
                    this.UpdCarMile();
                    MessageBox.Show("data has been inported!");
                }                this.lbMsg.Text = "";
            }
            else //excel
            {
                this.UpdCarType();
                if (isAAR == false)
                {
                    this.UpdCarHireForNotAAR();
                }
                if ((isAAR == false) && (IsImport))
                {
                    this.UpdLessee();
                }
            }            #endregion            DateTime t2 = DateTime.Now;
            int tt2 = 3;            if (isPrint)
            {
                prnImport();
                prnBlankContracts();
            }
            ImportPrintMileage.isRunning = false;
            this.chkImport.Checked = false;
            this.chkImport.Enabled = false;
        }
        #endregion
飞哥在执行数据导入操作的时候特别耗费时间,有没有办法解决下! 是不是多线程操作呢? 还是backgroundworker? 给点代码提示!  backgroundworker这个我试了,不太会用!

解决方案 »

  1.   

    明白,再打开一个线程执行,数据读取工作对吧!楼上的那位大哥!  
       一直开发web,对c#多线程不是太了解!能不能给点代码,参考一下!谢谢!
      

  2.   

    那就可以不用 backgroundworker,它的优势在于进度显示。你具体是什么需求? 因为可选方案有好几个呢
      

  3.   

      现在是两种导入选择,一种是导入Excel,一种导入dat数据文件。
       需求就是能够耗费尽量少的时间,导入数据文件,因为我再改之前人的代码,所以尽量在能不改变原有代码!
      

  4.   

    尽量在能不改变原有代码, 耗费尽量少的时间
    ---------------
    这个做不到。提高整体运行时间只能并行处理多个,就必须更改现有代码。但是可以异步的去处理,此时界面UI可用。 和ajax一样
      

  5.   

    还是用多线程处理吧,但是由于你的ImportThread函数内有很多控件刷新操作,因此多线程要在ImportThread的内部设置,单独对某个与控件无关的操作启用异步处理,控件操作必须是当前主线程才行。PS:C#5.0可以很好的解决你的问题,可惜VS2010没有集成,要单独安装,里面有个async 关键字,就是处理异步编程用的。
      

  6.   


    那你就在主线程上开启一个线程去做导入的工作即可类似的DEMOhttp://blog.csdn.net/sandy945/article/details/6948702