You need to decide what you wanna do in such a situation. i.e. if the worker thread is using the listcontrol and you click on the dialog, what do you want to do ?
I want my dialog to be movable, and to do his painting stuf "OnPaint()"...
I disable all controls in my dialog (in the worker Thread), and enable them when it end.

Does it take 1-2 seconds to populate the list because it has 5000 elements or because of the processing time needed to build the list?
The worker Thread read Informations from a DB (access DB using CRecrodsets) and puts them in the listctrl, so I read data record by record and i add to the list.

Every time I call the EnterCriticalSection from a worker thread, and at the same time from the UI dialog i have a hang. and its realy a blocking situation, I can do nothing when I get it, and I must kill the process...

Thank you