Ah...!!! Ok.
Bueno no es que no sirvan, el asunto es que en los procesos pesados, el PB deja de lado los refrescamientos de pantalla, para mejorar el rendimiento. Pero el progressbar sí trabaja, si no tocas la pantalla una vez que se inicia el proceso, verás que la barra se va moviendo, pero si cambias de pantalla en Windows, ahí es donde sucede el problema.
Que opción tienes?
Podrías incluir el comando:
Yield()
Algo como:
Do While
pb_1.Position(li_registro)
Yield()
Loop
Al final del ciclo, esto hace que PB revise la cola de mensajes y haga una pequeña pausa. Es posible que esto te ayude con el refrescamiento, pero también es posible que te atrase el proceso. Tendrías que probar para ver si te sirve.
Otra opción que te permite el Yiel() es la posibilidad de poder salirse del ciclo, si el usuario presiona la tecla Escape, por ejemplo. Tendrías que ponerle el código necesario al ciclo, claro está.
Saludos.