The main reason why a control is not updated would be because your code is 100% busy doing something.
If you application is performing CPU intensive task and want to update the UI regulary, the best option is to use a
BackgroungWorker[
^]
You will the do the CPU intensive code in another thread and more or less regulary report progress to the main thread.
You would call ReportProgress to report the progress percentage and if desired some more information.
You start by dropping a BackgroundWorker from the toolbox onto your form and adjust its property and implement appropriate events handler.
The final thing to be aware is that you want to call ReportProgress often enough for you UI to display the current state. If you have a progress bar, the reporting progress every 1% is a good start.
If you report progress too often, then there would be some overhead and in the worst case, the actual work might be completed a lot before the UI has completed.
Generally it is not that hard to find a right middle.