Questo perche' fai il CLASSICO ERRORE di chi non sa programmare e non ha capito come si realizzano le interfacce utente.
Nulla di strano se sei alle prime esperienze, ovviamente.
In soldoni:
NON SI ESEGUONO MAI OPERAZIONI COMPLESSE nel thread di aggiornamento dell'interfaccia utente, cosa che, ovviamente, stai facendo tu in questo momento.
Nel thread di aggiornamento dell'interfaccia utente si possono eseguire SOLO OPERAZIONI che si concludono nell'arco di QUALCHE MILLISECONDO AL MASSIMO. Al LIMITE, ma proprio se non se ne puo' fare a meno, UN CENTINAIO DI MILLISECONDI (un DECIMO DI SECONDO), MA ASSOLUTAMENTE NON DI PIU
Come si risolve?
L'approccio richiede un DIVERSO MODO di programmare, basato sul concetto di esecuzione in un thread separato, e di aggiornamento dell'interfaccia utente mediante eventi
La tua proposta, e', OVVIAMENTE, TOTALMENTE sbagliata!
Il tuo approccio E' SOLO un'ACCROCCHIO che NON RISOLVE IL PROBLEMA DI FONDO.
Consiglio: COMPRA un libro in cui si spiega come si realizzano le interfacce utente e STUDIA.