You're fetching the data on the UI thread, which will block the UI until the data is retrieved, by which time you no longer need to display the overlay at all.
What you need to do is fetch the data from a different thread, thus allowing the UI to display the loading overlay while the action is being performed. You should have a look at BackgroundWorker
- it knows how to handle these kind of scenarios pretty well (these scenarios being performing an operation on a background thread and allowing to update the UI while keeping it responsive).