Возможно, вы захотите изменить свой код на использование BeginUpdate и EndUpdate, например:
Control.BeginUpdate();
// Do something to the control, e.g. add items or whatnot
Control.EndUpdate();
Таким образом, обновление не нужно.
AFAIK, постоянно вызывающий Refresh, действительно является хаком, и его следует избегать, поскольку он сильно нагружает процессор (он должен обновлять все, а не только то, что изменилось).
Редактировать: если форма становится белой, кажется, что код рисования вообще не вызывается, что указывает на то, что он несколько не отвечает.
Я бы проверил код на наличие чего-либо, что может завести в тупик или иным образом зависнуть.