Скорее всего, вы удаляете все элементы во внутреннем операторе while, не оставляя ничего для повторения во втором проходе.
Если ваш listBox1 содержит более 1 элемента, исключение всегда будет вызыватьсяследующая строка:
listBox1.Items.Add(listBox7.SelectedItem.ToString() + "\r");
, поскольку выбранный элемент больше не существует.
Вот почему обработка исключений, даже если вы просто что-то тестируете, является критической.
Если ваша цель - обработать каждый элемент в listBox7, вы можете выполнить это, переместив следующую строку:
listBox7.SelectedIndex = 0;
внутри цикла for, над линией
sub1();