Ciao!
Il tuo problema è molto comune!La tua applicazione in pratica esegue un thread e tu esegui tutte le tue operazioni (come per esempio quella da te indicata) in quest'unico thread, bloccando completamente l'interfaccia grafica ed ogni qualsiasi altra operazione.
Devi implementare una programmazione multithreading, che ti permette quindi di "avviare" "operazioni" diverse in thread diversi, lasciando cosi libero il thread principale!
Implementa questa direttiva using (o imports se usi VB.net) :
using System.Threading;
Questa libreria del framework ti permette di programmare in multithreading.
La questione è molto complessa e richiederebbe un bel po di studio ma ti do comunque delle direttive generali per poter approcciarti al meglio al discorso.
Vogliamo ad esempio cercare di far partire uno splashscreen che in background effettui delle operazioni senza pero bloccare l'animazione di loading:
Crei un oggetto thread di nome loading:
private thread loading;
poi crei una routine che effettui le operazioni di background :
private void Operazioni()
{
//Lista operazioni
}
ora, non devi far altro che inizializzare il thread loading passandogli il metodo da elaborare nel thread secondario e farlo partire :
this.loading = new Thread(new ThreadStart(Operazioni));
this.loading.Start();
Cosi il secondo thread eseguirà le operazioni senza pero bloccare la GUI e/o le operazioni svolte nel thread principale!
Ti consiglio di dare un'occhiata alla parametrizedThreadStart e sopratutto al backgroundWorker che ti permette di gestire i threading in manierà piu semplice e sicura.
Dai un'occhiata anche all'istruzione lock (che blocca l'accesso a risorse in caso di concorrenza da parte di piu thread).
Purtroppo è un'argomento un po complesso, ma spero riuscirai a risolvere!
Ciao!!!