【问题标题】:Going Through Each Selected Item In *Changing* ListView在 *Changing* ListView 中遍历每个选定的项目
【发布时间】:2011-01-24 16:16:39
【问题描述】:
这是我用来遍历 listView 中每个项目的代码:
for (int i = 0; i < listView.SelectedItems.Count; i++) {
MessageBox.Show(listView.SelectedItems[i].SubItems[0].Text);
}
我的问题是,如果 listView 中的项目发生变化,这是否仍然有效。例如,假设我选择了 listView 中的所有项目,然后按下运行上述代码的按钮。在代码运行时,假设 listView 更新,其中一项被删除。代码还能成功运行吗?
【问题讨论】:
标签:
c#
listview
selecteditem
【解决方案1】:
有可能在之后循环条件允许另一次迭代并且之前在下一行中访问该项目之后才删除该项目。 p>
鉴于此,这不是我所说的可靠代码。您应该确保线程不会尝试同时访问相同的资源,我建议使用互斥锁或使用临界区。
【解决方案2】:
首先,您应该使用 foreach。但是,“成功”的迭代取决于您的定义。如果在 foreach 迭代的中间,列表发生了变化,它会抛出一个异常。如果您使用已有的基本整数索引,则不会引发异常,但行为可能是不可预测的。我会使用某种线程同步(例如互斥锁)来确保您可以成功地使用 foreach 进行迭代,而不必担心列表会发生变化。