我有一个项目列表。我解析这个列表,并根据一个条件,解析这个列表中的元素,并将它们保存在2个单独的列表中 - listOne和listTwo(类型为ListViewItem)。 稍后,我在这两个列表上调用AddRange,将它们添加到单独的listViews中 - listViewOne和listViewTwo。这是代码 -
listViewOne.Sorting = System.Windows.Forms.SortOrder.Ascending;
listViewTwo.Sorting = System.Windows.Forms.SortOrder.Ascending;
private void AddRangeExample()
{
// MessageBox.Show("say what!!");
ListViewItem NewlyCreatedItem = null;
var listOne = new List<ListViewItem>();
var listTwo = new List<ListViewItem>();
listViewTwo.BeginUpdate();
listViewTwo.Items.Clear();
listViewOne.BeginUpdate();
listViewOne.Items.Clear();
for (int i = 1; i <= count; i++)
{
// code to fetch item from main list.
if (//condition in main list)
{
if (// condition)
{
NewlyCreatedItem = new ListViewItem(// element from main list);
listOne.Add(NewlyCreatedItem);
}
else
NewlyCreatedItem = new ListViewItem(//element from main list);
listTwo.Add(NewlyCreatedItem);
}
}
}
ListViewItem[] listOneArr = listOne.ToArray();
ListViewItem[] listTwoArr = listTwo.ToArray();
listViewOne.Items.AddRange(listOneArr);
listViewOne.EndUpdate();
listViewTwo.Items.AddRange(listTwoArr);
listViewTwo.EndUpdate();
}
现在,如果不是使用AddRange,我会继续将项目添加到listviews - listViewOne和listViewTwo中,只在for循环中,然后每次将值添加到listview时,它将对整个列表进行排序。如果有几千个元素,则需要花费太多时间。因此,建议使用AddRange来停止绘制和排序元素,除非调用所有EndUpdate()并对整个列表视图进行一次排序。 但是, AddRange在这种情况下需要相同的时间。
有人可以看看并告诉可能出现什么问题,因为使用AddRange时应该注意事情。