На самом деле я использую этот код и работает нормально, но мне интересно, правильный ли это способ.
while WaitForSingleObject(MyThread.Handle, 0) = WAIT_TIMEOUT do Application.ProcessMessages; ShowMessage('i am done');