With method names like "Transmit" and "Receive", it is likely that a thread is involved. Like the threadpool thread on which a SerialPort's DataReceived event runs. Or code that runs due to a System.Timers.Timer's Elapsed event. Etcetera.
Setting a System.Windows.Forms.Timer's Enabled property to true in a worker thread like that doesn't work, it is not a thread-safe class. It does what it normally does, creates a hidden window that uses Windows' SetTimer() method to get the Tick event to fire. But that window is created on a thread that doesn't pump a message loop. So Windows doesn't generate the WM_TIMER messages.
Use Control.Begin/Invoke() as necessary to ensure any code that's related to timers or controls runs on the UI thread.