日期:2014-05-18  浏览次数:20828 次

老问题了,进度条的问题
一个ListView

在给ListView绑定数据的时候显示一个进度条

首先通过SqlDataReader进行读取数据 存放到一个DataTable里面


然后用For循环这个DataTable

C# code

                int j=0;
                for (int i = 0; i < DataTable.Rows.Count; i++)
                {
                    ListViewItem lvitem = new ListViewItem(Convert.ToString(J++), i);
                    lvitem.SubItems.Add(DataTable中的数据);
                    this.LV_HY_Total.Items.Add(lvitem);//给窗体的ListView填充数据
                }



现在我想从SqlDataReader的时候开始一直到for循环结束` 显示一个进度条`必须要是实时的``
假如有数据库有1万条数据(在查询这1万条数据的时候进度条就开始动,查询也完成了进度条就到了50%的状态,因为还有for循环)
从数据库查询完成显示为50% 在for循环结束显示100% 

最好能是一个通用的办法

------解决方案--------------------
其实很简单,可以用BackgroundWorker

他有三个事件
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
//SqlDataReader 读到 DataTable
worker.ReportProgress(50, "查询完成");
}

private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}

private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//DataTable写到DataView
progressBar1.Value=...
}

------解决方案--------------------
先获取总记录数,然后每获取一条 让变量+1

变量/总记录数 就是当前进度
------解决方案--------------------
我都放到线程池里执行
------解决方案--------------------
放另一个线程里去刷新进度条