BackgroundWorker.CancellationPending重置

时间:2017-10-11 13:05:05

标签: c# datagridview backgroundworker userform

我在UserForm应用程序中有DataGridView,我使用BackgroundWorker从SQL服务器填充,以保持用户检查已加载数据的能力。

我的理念是:

  1. 读取主Thread中的数据,在DataGridView
  2. 中显示数据
  3. 启动BackgroundWorker,我循环While直到请求新数据或无限期。
  4. 我的问题是,只有在主DataGridView中调用数据时才会填充Thread中的数据,但不会来自bw_ProgressChanged

    如果我在主While中调用Thread循环,它可以正常工作,因此数据库读取正常。

    使用DB和DataGridView的方法:

    private void SendRequest(string sql)
            {
                sqlDataReader = new SqlCommand(sql, connection).ExecuteReader();
            }
    
    private void GetResponse()
            {
                dt.Load(sqlDataReader, LoadOption.PreserveChanges);
                sqlDataReader.Close();
            }
    
    private void UpdateTable()
            {
                dtAll.DataSource = dt; //dtAll DataTable binded to DataGridView
            }
    

    BackgroundWorker活动:

    private void bw_DoWork(object sender, DoWorkEventArgs e)
            {
                int i = 0;
                while (true)
                { 
                    SendRequest("select top 5 * from table_1 order by tag");
                    GetResponse();
                    bw.ReportProgress(i);
                    i++;
                    Thread.Sleep(500);
                }
            }
    
    private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                Debug.WriteLine(e.ProgressPercentage);
                UpdateTable();
            }
    
    private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
    
            }
    

0 个答案:

没有答案