Загрузка формы замораживается, поскольку пользовательский интерфейс формы Windows выполняется в одном потоке. И логика, которую вы помещаете в событие Load этой формы, выполняется в этом потоке.
Вы можете легко запустить цикл в отдельном потоке, используя компонент BackgroundWorker в форме Windows. На событие DoWork вашего фонового работника вы помещаете код с циклом, который должен выполняться без блокировки вашего пользовательского интерфейса. В событии Form.Load вы можете запустить компонент фонового рабочего процесса, вызвав метод RunWorkerAsync . В обработчике событий вашей кнопки вы помещаете код для остановки фонового работника, вызывая метод CancelAsync .
Статья Как: реализовать форму, использующую фоновую операцию показывает, как именно ее выполнить.
Ваш комментарий о невозможности обновления текста TextBox из компонента фонового рабочего процесса. Это происходит потому, что не разрешено изменять состояние элемента управления Windows Form из другого потока (ваш фоновый рабочий код выполняется в отдельном потоке) Документация MSDN гласит:
Доступ к элементам управления Windows Forms не является поточно-ориентированным. Если у вас есть два или более потоков, управляющих состоянием элемента управления, можно перевести элемент управления в несогласованное состояние. Возможны и другие связанные с потоками ошибки, такие как состояние гонки и взаимоблокировки. Важно убедиться, что доступ к вашим элементам управления выполняется потокобезопасным способом.
Пример того, как вы можете обновить состояние элементов управления Windows-форм из фонового потока, будет аналогичен приведенному ниже (при условии, что новое значение уже сохранено в строковой переменной с именем text):
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
Я позаимствовал этот код, оторванный от Как: сделать потокобезопасные вызовы для статьи Windows Forms Controls . Он может предоставить вам больше информации о том, как работать с многопоточными окнами.