¿Estás obligado a usar WaitForSingleObject?, Existen otras formas de esperar a que termine un thread sin un bloqueo total de la aplicación.
Código:
// Declaras una variable de la clase bool Terminado, porque Terminated no es accesible desde fuera. Le asignas true en el thread al terminar.
for(;!MyThread->Terminado;){
Application->ProcessMessages();
}
La aplicación espera a que el thread termine pero no se bloquea.
Saludos.