As for the question, I agree with Shaggy that, as your database is Access, you should not try to query it multiple times on multiple threads. Using a single background thread to perform all four queries in series is perfectly fine but your code could be cleaned up a bit.
The code you have seems to be overly verbose. For one thing, you check whether the BackgroundWorker is busy in the Load event handler. How could it be? Where exactly would you have started it for it to be busy? Secondly, you are clearing both the DataSource and Items collection before binding the ComboBox. Why? Can either or both of them actually contain something? I can imagine that you would have a dummy item in there to start that indicates that data is loading and then you run this routine multiple times to load and reload data. In that case, clearing both might be worthwhile. Otherwise, you could only possibly need to clear one and possibly neither. Finally, you should always set the DisplayMember and ValueMember before setting the DataSource. If you know what those columns will be and they won't change, though, then you should be setting the DisplayMember and ValueMember in the designer and only setting the DataSource in code.
As for loading the data into four ComboBoxes, I would suggest two possible approaches:
1. Execute all four queries first and then bind all four ComboBoxes in the RunWorkerCompleted event handler.
2. Execute one query at a time and then bind the corresponding ComboBox in the ProgressChanged event handler. The last one could be done in the ProgressChanged or RunWorkerCompleted event handler. I'd probably use the former for consistency.
You should decide which way you want to go and then I can help you with it if required.
OT, you have this in your DoWork event handler:
vb.net Code:
TypCbo.DataSource = Nothing
Either the DataSource is already Nothing and that line of code is completely useless or else the DataSource is currently set and clearing will throw a cross-thread exception. DO NOT access controls AT ALL on secondary threads, other than to test InvokeRequired or to call Invoke, BeginInvoke or EndInvoke. Some operations are legal but you don't know which they are so don't even try. If you never try then you can never get it wrong.