シングルスレッドだとDoEventsを呼ぶ方法と、
処理を小分けにしてタイマーで処理する方法がある。
C#ならYieldで処理を反転させる変体チックな方法がおすすめ。

スレッドを使うならダブルバッファを使うべきだろう。