送高分---关于Tcp组件的Accept事件下的问题(Canvas can not allow drawing)该怎样解决(300分)

  • 主题发起人 主题发起人 Delx
  • 开始时间 开始时间
D

Delx

Unregistered / Unconfirmed
GUEST, unregistred user!
在编程过程中我使用的是tcpserver 和 tcpclint 组件,在服务段用tcpserver 下的Accept事件接收client发来的消息后需要在该事件下进一步处理,但在处理的过程中,不定期的程序报出“Canvas can not allow drawing” (在编译环境下),导致以后的代码不再运行,请高手执教!!!!!
急!急!
 
这个问题和你的TCPServer和TCPClient没任何关系,你大概是在做远程控制之类的软件,然后在本地绘制传递过来的画图,出现这个错误的原因可能是你的同步没有做好(或者根本没有做同步),导致在访问Image(或者任何图形控件,带句柄或者不带句柄的都算)的时候,Canvas绘制冲突导致的!解决的办法,一,做好同步,二,如果某些代码可能导致Canvas在绘制一个图形的过程中又会产生另外一个绘制请求,请使用Canvas.Lock和Canvas.Unlock来加锁控制。
 
to zqw0117
我在TCPServer 的Accept事件下只是对从client段传来的数据进行了入库,然后再转发走,美有涉及绘制图形的过程亚,我不清楚你所说的Canvas包括什么?
另外关于Canvas.Lock和Canvas.Unlock来加锁控制应该在哪里加呢??
该错误是不定期的的发生,(我在该事件的代码下写了若干showmessage但报错出现时没有具体位置,有时甚至不报错!!)
多谢!!!可再送分!!高手!!
 
to zqw0117
做好同步 怎样做??:(
 
如果用同步,会影响界面刷新,导致通讯很快的话,界面会卡死,建议你用现成去刷新界面,在线程里用sleep() 来控制刷新时间。
 
处理同步吧,你可以看看线程同步方面的资料,事件对象,临阶区等。
 
后退
顶部