我们常用IdTCPServer.Active := false;来关闭Idtcpserver,但这样会出卡机,并且操作也不会成功,后来,我改为这样:
procedure TfrmMain.ActStopExecute(Sender: TObject);
var
i: integer;
AList: TList;
begin
AList := IdTCPServer.Contexts.LockList;
try
for i := AList.Count - 1 downto 0 do
begin
TIdContext(AList.Items[i]).Connection.Disconnect;
end;
finally
IdTCPServer.Contexts.UnlockList;
end;
end;
也就是说不要用IdTCPServer.Active := false;这种方式来断开Idtcpserver。