Начнём с того, что
9000 строк в текстбоксе находиться не должны. Он тупо для этого не предназначен. Это нужно заливать в файл перед обработкой. А лучше читать в массив, уже преобразовав данные.
Во-вторых, это что за 3,14здец?
BeginInvoke(new MethodInvoker(() => label1.Text = (Convert.ToInt32(label1.Text) + 1).ToString()));
Нельзя было сделать локальную переменную с инкрементом внутри цикла и выводом в label? Или вообще выводить значение i в label1.Text (и offset от i задать, если надо).
Куда девается text_check, являющийся результатом всей этой непонятной конструкции?
Зачем ставить sleep(100), если конструкция подразумевает брутфорс по ip адресам, сгенерированным случайным образом?
И наконец, надо за собой закрывать открытые соединения, как уже сказал
@maxaon.