それなりに重い処理なら別スレッドでやればいいじゃん。
UIスレッドはワーカスレッド起動するだけですぐ解放されるわけだから、ボタンをEnabled=falseにすればいい。
ワーカスレッドが終了時にInvokeでボタンのEnabled=trueを実行する。