Plus exactement, VB est mono-process et mono-thread.
Donc quand tu es dans une boucle seul le code s'éxécute, tu ne peux plus rien faire. La preuve, la fenêtre freeze.
doevents est une instruction qui met en pause quelques instants le programme afin de contrôler qu'aucun autre thread n'à de traîtement à faire, notamment la gestion des évènements.
Donc toujours mettre des doevents dans les longues boucles principalement, afin de pouvoir trapper les actions utilisateur.
Quand tu utilises Winsock dans un programme VB, tu passes ton temps à mettre des doevents partout afin de ne pas perdre de trames sur le réseau. C'est le mot clé magique.
Il est très peu consomateur en ressources, n'hésite donc pas à le mettre dans une boucle.