Purpose of SyncThreads

I am interested to know when the SyncThreads property should be used. I notice that it is set to True by default. I have read through the source code and I see that this wraps the event generators in Synchronize calls. Presumably this is done so that it is safe to update GUI components from inside events such as OnRxChar. Is that correct?

In which case is it only safe to set it to False if the event handler code is thread safe?

The reason I ask is that I sometimes experience very choppy performance when SyncThreads is True. The device is transmitting 15 data packets per second. For testing I am decoding the data packet and writing it to the console window. With SyncThreads on, the updates are sporadic. With SyncThreads off, it is perfectly regular.

The reason is indeed for safe synching with UI updates, i.e. you can always update UI from the events without needing to write yourself any additional synchronize code. When doing so and there are lengthy UI operations, this can of course affect the serial communication itself.