С этим кодом связано множество проблем. Во-первых, для в цикле требует локальной переменной цикла:
var
Item: TListItem;
....
for Item in listView1.Items do
....
На протяжении всего вашего кода, когда вы используете тип где переменная необходима.
Ваш плохой обработчик исключений. Он проглотит все исключения. Измените его, чтобы обрабатывать только ожидаемые исключения.
Это кажется маловероятным, что
ServerSocket1.Socket.Connections[Item]
может быть проиндексирован пунктом, как вы пытаетесь сделать. Вам придется передумать, что вы имеете в виду в этой точке кода.
Наконец, как правило, вы не можете модифицировать контейнер во время итерации по нему. Вы делаете это, когда вы вызываете Delete
, чтобы удалить элемент из списка. Я думаю, вам нужно создать список элементов для удаления, когда вы перебираете список. И затем, когда итерация завершена, удалите элементы. И обратите внимание, что Delete
ожидает в качестве параметра индекс, а не элемент.
Как более общий совет, обычно использовать плохую идею использовать GUI-элемент управления в качестве основного контейнера данных. Где-то в очереди это дизайнерское решение, скорее всего, вернется, чтобы преследовать вас.
Пожалуйста, не задавайте вопросы об ошибках без включения ошибки. –