Well, it depends on what control that you are loading to a large degree.
If you seriously want to dive into the VERY deep end, I recommend buying the
Infralution Virtual Tree control as it does dynamic loading, and could give you some insight into how to do what you're asking.
However, if you're loading 1000 controls, I think you have a very serious design flaw. Why would you want to do that? I really have no idea what you're trying to accomplish, so without more details, I'm afraid that I can't be of much help.
Still, if you want to do it like that...
Do it in threads. Have an update that lets the user know what's going on. Create all the controls. Fill them. Return them. Add them to the UI in a Panel control (or whatever - I'm assuming a Panel is best there). Return control of the application to the user when it's finished or they click a "Cancel" button or a "Stop" button. (I'd use "Stop" to mean "that's enough for now".)
If you can post more details, maybe I or someone else can chime in with some better information. Until then, look into threading as that will likely solve your problems.