在查询大数据量时,窗体界面会不动,“正在查询...”的提示也不能显示。所以打算用多线程来实现,
 可是当在线程里面执行到 this.dataGridDF.DataSource=dt.DefaultView;填充数据
 时却提示报错,说什么该线程不能调用主线程创建的控件等等。
 后来查了许多资料,终于搞定。可以在查询数据库时操作别的了,“正在查询...”的提示也显示了。
  
 
//或者在前面用一个线程查询,在线程里调用dataGrid.BeginInvoke(异步方法)来单独填充
  
   public delegate void myDelegate();
   DataTable dt;
  
   private void btnDianJia_Click(object sender, System.EventArgs e)
   {
    try
    {
     mythread = new Thread(new ThreadStart(ThreadWork));
     mythread.Start();    
    }
    catch(System.Exception ex)
    {
     MessageBox.Show(this,ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }   
   }
  
   void ThreadWork()
   {
    this.dataGridDJ.CaptionText="正在查询电价数据...";
    mf.statusBarPanel1.Text="正在查询电价数据...";
    this.Cursor=Cursors.WaitCursor;
     string shijian=this.dateTimeDianJia.DateValue;
    DateTime today=DateTime.Today;
    string mingcheng=this.txtMingCheng.Text;
    string leibie=this.cmbBoxLiebie_DJ.SelectedValue.ToString();
    PowerWeb.BLL.DianFeiDianJia.DianJia dj=new PowerWeb.BLL.DianFeiDianJia.DianJia();
  
    if(shijian==today.ToString("yyyyMM"))
    {
     dt=dj.GetList(leibie,mingcheng).Tables[0];
    }
    else
    {
     dt=dj.GetListOld(leibie,mingcheng,shijian).Tables[0];
    }
    this.dataGridDJ.CaptionText=shijian+"电价信息 (共计条"+dt.Rows.Count.ToString()+"记录)";
  
    dataGridDJ.BeginInvoke(new myDelegate(FillData));//异步调用(来填充)
    
    this.Cursor=Cursors.Default;
    mf.statusBarPanel1.Text="查询结束";
   }
   
   private void FillData()
   {
    this.dataGridDJ.DataSource=dt.DefaultView;
   }
  
  
 //在主线程里调用dataGridDJ.BeginInvoke()异步方法,在异步方法里执行查询,并填充数据。
 (但这样也不能显示“正在查询...”的提示的)
  
  
  public delegate void myDelegate();private void btnDianJia_Click(object sender, System.EventArgs e)
   {   
    try
    {
     this.dataGridDJ.CaptionText="正在查询电价数据...";
     mf.statusBarPanel1.Text="正在查询电价数据...";
     this.Cursor=Cursors.WaitCursor;
  
     dataGridDJ.BeginInvoke(new myDelegate(ThreadWork));  
  
     this.Cursor=Cursors.Default;
     mf.statusBarPanel1.Text="查询结束";
     
    }
    catch(System.Exception ex)
    {
     MessageBox.Show(this,ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
    
   }
    
   void ThreadWork()
   {
    string shijian=this.dateTimeDianJia.DateValue;
    DateTime today=DateTime.Today;
    string mingcheng=this.txtMingCheng.Text;
    string leibie=this.cmbBoxLiebie_DJ.SelectedValue.ToString();
    PowerWeb.BLL.DianFeiDianJia.DianJia dj=new PowerWeb.BLL.DianFeiDianJia.DianJia();
    DataTable dt;
    if(shijian==today.ToString("yyyyMM"))
    {
     dt=dj.GetList(leibie,mingcheng).Tables[0];
    }
    else
    {
     dt=dj.GetListOld(leibie,mingcheng,shijian).Tables[0];
    }
    this.dataGridDJ.CaptionText=shijian+"电价信息 (共计条"+dt.Rows.Count.ToString()+"记录)";
    this.dataGridDJ.DataSource=dt.DefaultView;
  
   } 
 
                     
            
        













 
                    

 
                 
                    