出处:http://9host.cn/asp.net/2007417222322.htmlhtml
在查询大数据量时,窗体界面会不动,“正在查询...”的提示也不能显示。因此打算用多线程来实现,但是当在线程里面执行到 this.dataGridDF.DataSource=dt.DefaultView;填充数据时却提示报错,说什么该线程不能调用主线程建立的控件等等。web
后来查了许多资料,终于搞定。能够在查询数据库时操做别的了,“正在查询...”的提示也显示了。数据库
- 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;
- }