Tu peux utiliser l'evenement DataArrival pour recevoir les informations, et ensuite tout mettre dans des variables publiques avec un petit drapeau (variable globale booléenne) qui signal si toutes les données ont été reçues.
Un peu barbare, mais ça fonctionne.
Note : Pour la phase d'attente, utilise DoEvents pour permettre la réception.