我在FORMS中加了一个idTcpServer控件,在onExecute事件中这样写:procedure Tform1.IdTCPServer1Execute(AThread: TIdPeerThread);
var cmd: string;
begin
try
cmd:= AThread.Connection.ReadLn(EOL);
//这个方法对输入的cmd参数进行处理
//并根据处理结果在窗体中显示相应的结果
handleInput(AThread, cmd);
except
AThread.Connection.Disconnect;
AThread.Terminate;
Exit;
end;
end;好象很简单,但是我运行以后,发觉接收到数据后,窗体就再也不会动了,好象死机一样,只能在任务管理器里把它中止,跟踪以后发现它处理完handleInput(AThread, cmd)这一句后就始终停留在cmd:= AThread.Connection.ReadLn(EOL)这一行,再也不动了,为什么呢?
要怎么处理?
var cmd: string;
begin
try
cmd:= AThread.Connection.ReadLn(EOL);
//这个方法对输入的cmd参数进行处理
//并根据处理结果在窗体中显示相应的结果
handleInput(AThread, cmd);
except
AThread.Connection.Disconnect;
AThread.Terminate;
Exit;
end;
end;好象很简单,但是我运行以后,发觉接收到数据后,窗体就再也不会动了,好象死机一样,只能在任务管理器里把它中止,跟踪以后发现它处理完handleInput(AThread, cmd)这一句后就始终停留在cmd:= AThread.Connection.ReadLn(EOL)这一行,再也不动了,为什么呢?
要怎么处理?
也就是handleInput(AThread, cmd);这一句,因该是涉及的窗口操作的吧,把它写成一个过程,
用Synchronize(过程)来在主线程里执行另外,还可以放一个IdAntiFreeze控件,防止窗口无相应
如何用?参数如何传递?
Tform1.IdTCPServer1Execute里面写的就是客户线程里面的代码