при выполнении приложений с графическим интерфейсом поток, который заботится о рисовании представления, является тем же, что запускает события, поэтому, если вы в блоке событий этого потока пользовательский интерфейс остановится, попробуйте использовать фоновый работник:
BackgroundWoker bg = new BackGroundWorker();
bg.DoWork += (sender,args) =>
{
foreach(MyObject in List)
myobject.Prop = HelperClass.downloadData();
};
bg.RunWorkerAsync();
BackgroundWorker выполняет вашу работу в другом потоке, освобождая поток пользовательского интерфейса.
Если этот код ничего не меняет в пользовательском интерфейсе, вы можете просто поставить рабочий элемент в очередь в пул потоков.