Estas haciendo todo al revez.
La GUI corre en el thread principal y lo estas poniendo en un background. La parte "lenta" la estas dejando en el thread ppal, bloqueando la GUI.
No hay razon (normalmente) para poner GUI dentro de otro thread, siempre usa otros threads para correr de forma concurrente CPU/IO intensivo.
Por otro lado, si es solo poner un "espera mientras", entonces no tienes que hacer esto. Solo arranca el spinner al inicio, ejecuta la parte "lenta" y paras el spinner al final.
Porque ademas, ese progreso que tienes no sirve de nada...
Y estas masacrando la CPU al tener un while sin un respiro (un sleep o una tarea asincronica).
Y es mala cosa "matar" threads.
Mejor dicho, estudia mas sobre este tema