OriginalGriff
Чтобы добавить к тому, что правильно говорит Ричард: причина, по которой вы получаете ошибку, заключается в том, что событие DataReceived не обрабатывается исходным потоком пользовательского интерфейса - как ясно из документации:
Событие DataReceived вызывается во вторичном потоке при получении данных из объекта SerialPort. Поскольку это событие возникает во вторичном потоке, а не в основном потоке, попытка изменить некоторые элементы в основном потоке, такие как элементы пользовательского интерфейса, может вызвать исключение потока. Если необходимо изменить элементы в основной форме или элементе управления, отправьте запросы на изменение обратно с помощью Invoke, который выполнит работу над соответствующим потоком.
При попытке получить доступ к любому элементу управления из потока, отличного от потока, в котором они были созданы (поток пользовательского интерфейса), вы получите сообщение об ошибке.
В VB можно "обойти" это, добавив это в свой конструктор форм:
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
Но гораздо, гораздо лучший способ сделать это-использовать Invoke для перемещения доступа к элементу управления обратно в поток пользовательского интерфейса, как описано в ссылке Ричарда.