if your worker threads cause your UI the be unresponsive...

1) you're messing around with thread priorities in an inapropriate manner.
2) you have a design/conceptual issue where your worker thread is hard-blocking the UI, OR the UI is blocking on a result from a thread that isn't coming.
3) your worker threads are posting so many messages to the UI thread that the UI can't process them all in a timely manner. This too is a design issue.


I can have 100 worker threads all doing heavy calculations and IO with all CPU cores at 100% and this will have (almost) zero effect on the UI thread if I have my priorities right and am not causing UI blocks.


as to the code you posted...
you're passing the same 'this' (I'm assuming that's a CSerialCom instance) to 2 threads.
you pretty much expecting this CSerialCom class to be thread safe at the function level. That could be the case, but it would be somewhat rare if it was implemented that way. It's highly unusual for a serial comm class to be implemented that way.