Это крайне экстремально неприятный код, и вы должны использовать таймеры.
Однако, если вы настаиваете на этом, попробуйте добавить Application.DoEvents()
(дрожь) после строки Thread.Sleep(100);
.
Кстати, а почему вы не хотите использовать таймеры? Они очень просты в настройке и сделают этот код намного чище, чем в итоге.