Thanks Athiest, after reading and a bit of googling, i figured out the problem. I was already passing the tcp events to the main thread, so i THOUGHT.

The problem code was:

Code:
If frmMain.InvokeRequired Then
   frmMain.Invoke MySub
else
   frmMain.MySub
End if
Which, apparently because it was on its own thread, it was creating a new class of frmMain, which didnt require an invoke. I fixed it with the following code
Code:
Dim MainFrm As frmMain = CType(Application.OpenForms(0), frmMain)
If MainFrm.InvokeRequired Then
   MainFrm.Invoke MySub
else
   MainFrm.MySub
End if