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