如何等待SocketClient的一些事件做完才返回(100分)

H

hhlyt

Unregistered / Unconfirmed
GUEST, unregistred user!
我有两个窗体Form1,Form2,
Form1上有一个SocketClient1控件,控件本身的事件ClientSocket1Connect和
ClientSocket1Read中有自己写的一些程序,有一个定义在interface部分的过程
getfile1(filename:ShortString),
procedure getfile1(filename:ShortString);
begin
Form1.ClientSocket1.Address:='172.20.191.4'; //设置地址
Form1.ClientSocket1.Port:=7475; //设置端口
Form1.ClientSocket1.Open;
end;
procedure Form1.ClientSocket1Connect(Sender: TObject;Socket: TCustomWinSocket);
begin
一些自己写的处理过程;
end;
procedure Form1.ClientSocket1Read(Sender: TObject;Socket: TCustomWinSocket);
begin
一些自己写的处理过程;
end;
在Form2中implementation部分uses Form1;有一个按钮Button1,定义了以下事件:
procedure Form2.Button1Click(Sender: TObject);
begin
Form1.getfile1('test.txt');
end;
在调试过程中,我发现在鼠标单击Button1按钮时,程序的确是转向了Form1的getfile
过程执行,但getfile过程执行完了后,就返回到Form2的Button1Click事件的
‘Form1.getfile('test.txt'’的下一行,到执行完Button1Click事件的end后,才又转向
去执行Form1的ClientSocket1Connect事件和ClientSocketRead事件,而我的要求是在调用
getfile过程完后等待ClientSocket1Connect事件和ClientSocketRead事件执行完后,才
返回到Form1的Button1Click事件的后一条语句,不知如何编写,才能达到我的目的!
100分奉上!



 
如果用ctBlocking的clientsocket,可以等待到ClientSocket1Connect,但等不到
ClientSocketRead
 
呵呵,你是用TClientSocket异步方式,
Form1.ClientSocket1.Open;这一句是马上返回,
不会阻塞,所以就出现你说的现象,
我有办法可以实现你的要求,但是负面影响很大,
你的窗体会失去消息响应,
所以你最好是修改你的程序结构,我想是你程序结构
和你对TCP不熟悉造成你的结构不合适
 
如果你要同步
就用 indy 这个控件组吧,免费的 D6 已经自带了
 
接受答案了.
 
顶部