Ciao, io ho fatto così:
ho impostato a 0 l' Opacity della form principale e nel suo evento load faccio lo ShowDialog di un' altra form (lo spash screen) dove leggo/verifico dei file mostrando l' avanzamento con label e progressbar modificate in base a degli eventi e da un timer, quando finiscono le procedure richiamo una sub nel form principale che chiude lo splash e ripristina l' Opacity. Con un timer e l' Opacity delle due form ho creato anche l' effetto "dissolvenza", non serve ha niente ma è figo
Quindi, con la mia poca esperienza, posso consigliarti di far leggere l' xml allo splash o utilizzare un BackgroundWorker.
PS: quando non riuscivo a usare bene la progressbar la "taroccavo" con una gif animata e una label "Avvio in corso..."