Declare a custom event in your Serial Port class that will pass the information OUT to the form.
When the instance of your class is created in the Form you use AddHandler() to wire up a method in the form to handle that event.
Thread marshaling can generally be done in one of three ways:
(1) From within the Form: Use Me.InvokeRequired() along the Me.Invoke() and a Delegate.
(2) From within the Serial Port Class: Encapsulate a BackgroundWorker() control and let it marshal for via the ProgressChanged() event.
(3) From within the Serial Port Class: Use a SynchronizationContext() to switch threads before raising the event.
Some examples of the various techniques here:
http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_26253934.htmlhttp://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_24295878.html