如何在线程中 操作 TClientSocket ?(100分)

  • 主题发起人 主题发起人 Chinester
  • 开始时间 开始时间
C

Chinester

Unregistered / Unconfirmed
GUEST, unregistred user!
在局域网中需要一个小应用。
服务器:
TServerSocket :
Port = 900021
ServerType = stNonBlocking
ThreadCacheSize = 20
客户端:
ClientType = ctNonBlocking
在窗体中加入button1 事件:
form1.ClientSocket.Address:=addr.text;//IP: 192.168.1.3
form1.clientsocket.Port:=strtoint(port.text);//900021 同上面
Try
form1.ClientSocket.active:=true
.....
这样是可以连接的。而且工作正常
因为考虑到电脑需要重启,而且有特别的应用。所以我用到了一个 线程。 开机以参数启动程序
并且运行线程:
procedure Thread_Task.Execute;
begin
form1.button1.click;//
。。。。。
可是这样 服务器和客户端都没有任何反应...

也有试过把 form1.button1.click;
放到程序的 form.show 里面去。不过也没有反应.
 
在线程中建议使用阻塞方式。
虽然TClientSocket也支持阻塞方式,但建议使用INDY代替,用起来会方便一些。
呵呵,做广告:你也可以使用我的控件包
http://www.delphibbs.com/keylife/iblog_show.asp?xid=29836
 
线程里面直接调用使用VCL控件是不安全的。
 
偷懒的方法,使用第三方组件,ICS等。
要不就是自己用I/O模型来实现。
 
线程里面直接调用使用VCL控件是不安全的。
Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TMainFrm.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end;
 
也可以传值一样传进去一个
 
后退
顶部