关于显示方面一个百思不得其解的问题,大家帮帮忙
我制作了一个雷达数据成像的软件,不断接收雷达发送的数据包,实时处理并显示出来。但是现在就出现非常奇怪的问题,就是经常画面会卡住,画面不更新了。
我使用的BitBlt将数据每隔一段时间复制到Form1-> canvas-> handle。而在被卡住的过程中整个程序并没有Down掉,因为还有其它的线程在接收GPS时钟,那个时钟就没有问题。
我觉得刷新画面的线程也没有问题,因为当画面不更新的时候我只要把活动窗口换成别的,或者是打开一个菜单之类的东西,或者是按一下Windows键,反正总而言之吧,激活一下其它的窗口,然后再回到我的程序,显示就又正常刷新了。我查了一下,前面说到的那些操作好像都会调用OnPaint事件,所以也可以说只要刷新一卡住就调用OnPaint,那么刷新就又恢复正常了。
大家帮帮忙,这到底是怎么回事啊,我感觉很奇怪,整个程序运行应该是没有什么问题,就是画面经常就不动了,有没有人有这方面的经验啊?
[解决办法]
你应该做
Canvas-> Lock();
// 绘制
Canvas-> Unlock();
[解决办法]
如果是在线程里调用Form1-> Canvas的话就应该用Synchronize来进入主线程操作.
[解决办法]
估计是窗口没有收到WM_PAINT消息导致图像不能显示.PostMessage(Form1-> Handle, WM_PAINT, NULL, NULL) ;这种方法挺好, 用TTimer定时发送就行了.
[解决办法]
Waiting4you(毛毛) ( ) 信誉:100
如果是在线程里调用Form1-> Canvas的话就应该用Synchronize来进入主线程操作.
Canvas对象本身就是线程安全的不需要调用Synchronize来操作。