Проходя через каждый выбранный элемент в * Изменение * ListView - PullRequest
0 голосов
/ 24 января 2011

Это код, который я использую для просмотра каждого элемента в listView:

for (int i = 0; i < listView.SelectedItems.Count; i++) {
    MessageBox.Show(listView.SelectedItems[i].SubItems[0].Text);
}

Мой вопрос: будет ли это работать, если элементы в listView изменятся.Например, предположим, что у меня выбраны все элементы в моем listView, и нажмите кнопку, которая запускает приведенный выше код.Пока код работает, скажем, список обновляется, и один из элементов удаляется.Будет ли код по-прежнему успешно выполняться?

Ответы [ 2 ]

3 голосов
/ 24 января 2011

Существует вероятность того, что элемент будет удален только через после условия цикла, разрешенного для другой итерации, и до доступа к элементу в следующей строке.

Учитывая это, это не то, что я бы назвал надежным кодом. Вы должны убедиться, что потоки не пытаются получить доступ к одному и тому же ресурсу в одно и то же время, я бы рекомендовал мьютекс или использование критических разделов.

0 голосов
/ 24 января 2011

Прежде всего, вы должны использовать foreach.Однако «успешная» итерация зависит от вашего определения.Если во время итерации foreach список изменяется, он выдаст исключение.Если вы используете базовый целочисленный индекс, как у вас уже есть, исключение не будет выдано, но поведение может быть непредсказуемым.Я бы использовал какую-то синхронизацию потоков, например мьютекс, чтобы убедиться, что вы можете успешно выполнять итерации с foreach, не беспокоясь об изменении списка.

...