Tutto torna: se leggi la documentazione dell'evento SerialPort.DataReceived, troverai:
(probabilmente questo dipende dal fatto che l'oggetto SerialPort dietro le quinte crea un thread secondario, in cui fa chiamate bloccanti per leggere i dati da seriale, e ogni volta che la chiamata di lettura ritorna solleva l'evento DataReceived)L'evento DataReceived viene generato su un thread secondario quando dall'oggetto SerialPort vengono ricevuti i dati. Poiché questo evento viene generato in un thread secondario e non in quello principale, il tentativo di modificare alcuni elementi del thread principale, come gli elementi di interfaccia, potrebbe generare un'eccezione thread. Se è necessario modificare alcuni elementi nelle classi principali Form o Control, eseguire il postback delle richieste di modifica utilizzando il metodo Invoke, che eseguirà il lavoro nel thread appropriato.

Rispondi quotando