Haz el proceso en un thread separado.
Lo que pasa es lo siguiente:
1. La GUI en todos los frameworks que conozco hasta ahora trabajan sobre un solo thread.
2. Si ejecutas un método, ese método corre sobre el mismo thread de la GUI y no es hasta que acaba la ejecución de tu método que el control regresa a la GUI. Por eso se queda como 'congelado'.
3. Para evitar lo anterior lo que comúnmente se hace es ejecutar un thread para que haga la tarea en paralelo y cuando termine le avise al programa.
Aquí hay ejemplo de como lograr lo que te comento.
http://stackoverflow.com/questions/8...unning-process