Basically, you have a problem: you want to load a large amount of data into a UI control, without the UI freezing up.
And that's a problem, because only the UI thread can access UI controls, and running a long task on the UI thread means it can't do anything else so teh display never gets updated.
So do two things:
1) Move your combobox loading code into the Form.Shown event so the user can see something happened.
Then
2) Rewrite your load code so it can use a second thread.
Create a
BackgroundWorker[
^] instance, as tell it to report progress. Add DoWork, ProgressChanged, and RunWorkerCompleted event handlers, and set the Cursor to the wait cursor.
Then start the worker running.
In the DoWork handler, fetch your data from the DB, and package it up in smallish groups - maybe 10 items per group - and report each as a progress event, passing the Group via the UserState property.
In the ProgressChanged handler, fetch the group from the UserState, cast it back to the group type, and add each item to your ComboBox.
In the RunWorkerCompleted handler, set your Cursor back to the default cursor.
Alternatively, read the data in the DoWork, then pass it back as a single object as a Progress and use that as the DataSource for the ComboBox if that's your preference.