Il controllo MsComm prevede già un buffer di input di dimensioni regolabili tramire la proprietà InBufferSize. La lettura dei dati ricevuti e parcheggiati in questo buffer avviene al raggiungimento della soglia specificata da RThreshold, con l'attivazione dell'evento OnComm. Se i messaggi ricevuti hanno tutti la stessa lunghezza può tornare utile la proprietà InputLen, altrimenti si può prelevare dal buffer un byte alla volta sino a riconoscere la fine del messaggio.
Quello che hai pensato è giusto come principio, ma è già implementato dall'oggetto MsComm.