C# 是否使用巨大的列表项检查listview中的所有项?

C# 是否使用巨大的列表项检查listview中的所有项?,c#,.net,winforms,listview,C#,.net,Winforms,Listview,我想在列表视图中查看大约3000项。这是一段代码: foreach (ListViewItem item in this.lvItem.Items) { item.Checked = !item.Checked; } 但在检查项目时,listview非常慢。请给我一些解决这个问题的办法好吗?谢谢 像这样的东西对你有用吗。。。选中时,将项目添加到词典中…未选中时,从词典中删除。未测试代码,但想知道是否可以执行以下操作: Dictionary<String, ListViewItem

我想在
列表视图中查看大约3000项。这是一段代码:

foreach (ListViewItem item in this.lvItem.Items)
{
    item.Checked = !item.Checked;
}

但在检查项目时,listview非常慢。请给我一些解决这个问题的办法好吗?谢谢

像这样的东西对你有用吗。。。选中时,将项目添加到词典中…未选中时,从词典中删除。未测试代码,但想知道是否可以执行以下操作:

Dictionary<String, ListViewItem> Dic = listView.Items 
    .Cast<ListViewItem>() 
    .ToDictionary(x => x.Text, x => x.SubItems[0].Checked); 
foreach (Recipient recipient in recipients)
{
    var item = new ListViewItem(recipient.FirstName + " " + recipient.LastName);
    item.Tag = recipient;
    item.Checked = true;
    lvRicipients.Items.Add(item);
}
Dictionary Dic=listView.Items
.Cast()
.ToDictionary(x=>x.Text,x=>x.SubItems[0]。已选中);

你问我该怎么做。我想说的是,在您的检查事件中,您希望将项目添加到列表视图中。我怀疑用户是否真的会检查所有3000项,所以请更改代码以决定如何处理已检查项,我给您的示例使用Lambda表达式。如果您不熟悉,请更改您的问题,以反映您实际需要和/或想要什么…

我听说,对于大型列表项,for循环比foreach循环工作得更快 试一试

for(int i=0;i=
我也不认为期望用户点击3000个项目是明智的。但我最近做了一件事,在添加项目时,我知道项目永远不会很多,默认情况下应该检查它们,在将项目添加到列表之前检查项目

大概是这样的:

Dictionary<String, ListViewItem> Dic = listView.Items 
    .Cast<ListViewItem>() 
    .ToDictionary(x => x.Text, x => x.SubItems[0].Checked); 
foreach (Recipient recipient in recipients)
{
    var item = new ListViewItem(recipient.FirstName + " " + recipient.LastName);
    item.Tag = recipient;
    item.Checked = true;
    lvRicipients.Items.Add(item);
}

for(inti=0;i我也有同样的问题,但我找到了原因

我的listView附带了一个“ItemChecked”事件处理程序,它正在做一些繁重的工作

我删除了eventHandler,它解决了我的问题。 尝试删除任何“ItemChecked”eventhandler,看看速度是否更好。

您需要在循环之前和之后调用:

listView1.BeginUpdate();
foreach (ListViewItem item in listView1.Items)
    item.Checked = true;
listView1.EndUpdate();

调用
BeginUpdate
会阻止控件在调用
EndUpdate
方法之前进行绘制。

我的想法:为什么列表视图中需要3000个项目?我认为没有人会逐一检查并勾选。它们应该被很好地分组和组织起来。如果操作正确,勾选或取消勾选3000个项目的速度相当快。它花费的时间太长,因为控件在每个项检查后都会重新绘制。您需要在for循环之前停止绘制,并在循环之后重新绘制。这样我们将只进行一次重新绘制。请阅读。