首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

第一回查询正常,第二次查询就会多查询数据一次,第三次再点击按钮查询的时候又会查询三次,奇怪了!那为给麻烦看看原因!

2013-09-08 
第一次查询正常,第二次查询就会多查询数据一次,第三次再点击按钮查询的时候又会查询三次,奇怪了!那为给麻

第一次查询正常,第二次查询就会多查询数据一次,第三次再点击按钮查询的时候又会查询三次,奇怪了!那为给麻烦看看原因!!
private void btnQuery_Click(object sender, EventArgs e)
        {            
            dataG_rsj.Rows.Clear();           
            Bw.WorkerSupportsCancellation = true;
            Bw.WorkerReportsProgress = true;
            Bw.DoWork += new DoWorkEventHandler(Add);//绑定事件
            Bw.ProgressChanged += new ProgressChangedEventHandler(Progress);
            Bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(End);           
            Bw.RunWorkerAsync();

        }
 BackgroundWorker Bw = new BackgroundWorker();


        public void Add(object sender, DoWorkEventArgs e)
        {
           string strSql = "select  * from Sale_Table";
            OracleDataReader reader = App.DBE.ExecReader(strSql);
            object[] objcell = new object[34];
            if (reader.HasRows)
            {
                    while (reader.Read())
                    {
                        if ((Bw.CancellationPending == true))
                        {
                            e.Cancel = true;


                            break;
                        }
                        else
                        {
                            reader.GetValues(objcell);
                            Bw.ReportProgress(3, objcell);
                            Thread.Sleep(15);
                     
                        }                 

                    }              

            }
            reader.Close();

        }
        public void Progress(object sender, ProgressChangedEventArgs e)
        {            
            object[] objcell = e.UserState as object[]; 
            this.dataG_rsj.Rows.Add(objcell);
            label3.Text = DateTime.Now.ToLongTimeString();
        }

问题是现在点击按钮后,第一次查询正常,第二次查询就会多查询数据一次,第三次再点击按钮查询的时候又会查询三次,奇怪了!那为给麻烦看看原因!!


[解决办法]


Bw.WorkerSupportsCancellation = true;
Bw.WorkerReportsProgress = true;
Bw.DoWork += new DoWorkEventHandler(Add);//绑定事件
Bw.ProgressChanged += new ProgressChangedEventHandler(Progress);
Bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(End);   

放到load中 注册一次就可以了

热点排行