作者:rhythm
- 向ListView 中添加大数据量解决屏幕刷新“闪”的现象。
向listview中添加超过10000条或更多的数据时,如果我们一条条添加,屏幕会闪的厉害,如果我们一次性添加,可能我们要等上很长时间才能出现结果。
为了解决(准确的是减轻)这个问题,我们采用ListView的方法AddRange(),配合BeginUpdate() 和EndUpdate() 使用。
FillListView()
{
Int TotalRecord = 10008; //总的记录数
Int EveryTimeRecord = 100; //每次批量增加的数量
Int TotalTimes = Math.Floor(TotalRecord / EveryTimeRecord);//批量添加的执行次数
For(int I = 0; I < TotalTimes; i++)
{
ListViewItem[] listViewItems; //声明listviewitem集合,以便满足AddRange所需的参数
If(I < TotalTimes - 1) //I 不是最后一次执行
{
listViewItems = new ListViewItem[initCount];
for ( int j = 0; j < EveryTimeRecord; j++ )
{
int indexRecord = j + i * EveryTimeRecord; // 记录的索引
listViewItems[i] = new ListViewItem( );
listViewItems[i] = AddListViewItem ( batchDocuments[indexRecord] );
}
}
Else //最后一次执行,剩下的余数
{
int lastQuantity = TotalRecord - EveryTimeRecord * i;
listViewItems = new ListViewItem[lastQuantity];
for ( int j = 0; j < lastQuantity; j++ )
{
int indexRecord = j + i * EveryTimeRecord; // 记录的索引
listViewItems[i] = new ListViewItem( );
listViewItems[i] = AddListViewItem ( batchDocuments[indexRecord] ); //将一个已知listviewitem赋值给声明的listviewitem
}
}
ListView.BeginUpdate();
ListView.Items.AddRange( listViewItems ); //利用AddRange批量增加,目的是减少刷屏次数,减轻不断闪烁问题。
ListView.EndUpdate();
}
}