出處: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;
- }