在新建的线程中采集串口数据,很卡的原因?解决办法

在新建的线程中采集串口数据,很卡的原因?
串口的数据来自单片机,每秒钟单片机发送过来一帧数据,26个字符;

在c++ builder中新建一个线程(使用线程类的方法),用来接收串口数据。在线程的Execute方法中调用Synchronize(Collect),在Collect()方法中实现串口数据的接收。接收的过程是:判断串口是否有数据,有的话清空缓冲区(由于缓冲区的数据可能是几秒钟以前的,清除掉,后面重新获取新的数据),等待(用while循环实现,每个循环sleep(100),直到串口中有数据时结束循环,停止等待),有新的数据后接收,直到结束符\n后本帧接收完毕。然后把数据添加在主窗口的Memo中的一行。

在主窗体放置一个Button,点击后,thread1->Resume(),启动采集。

问题:启动采集后,采集正常,但主窗体很卡。我用的多页面控件(pagecontrol),切换到其他页面简直是慢动作。

请问是什么原因?尝试把新建线程的优先级降低一级,也不行。按照我的理解,就是新建的线程再忙,主线程也不应该卡啊。

请大家指点!

------解决方案--------------------
你在Synchronize里面用while循环实现采集,这个跟没有用线程是一样的,因为Synchronize是把代码放到主进程里面执行的.改这部分的代码
------解决方案--------------------
采集数据的代码不要放到Synchronize里面.就直接放到Execute里面.
------解决方案--------------------
只Synchronize更改界面显示的代码,跟界面无关的不要加, 否则影响窗口响应,会卡.