我手动断开与客户端的连接后,我想停止执行此TCPServerExecute
事件:
procedure TMainForm.TCPServerExecute(AContext: TIdContext);
var
TCPClient : TIdTCPClient;
begin
try
TCPClient := nil;
try
TCPClient := TIdTCPClient.Create(nil);
if aConditionIsMet then begin
AContext.Connection.IOHandler.WriteLn('Disconnected from server.');
AContext.Connection.Disconnect;
Exit;
end;
finally
FreeAndNil(TCPClient);
end;
except on e : Exception do
begin
MainForm.Log('error in Execute=' + e.Message);
end;
end;
end;
在客户端一切都很好,但在服务器端我无限循环TCPServerExecute。我输错了什么?如何在输入TCPServerExecute
后停止执行AContext.Connection.Disconnect
?
答案 0 :(得分:2)
循环继续,因为没有正确处理Indy异常。
删除异常处理程序,或在记录后重新引发异常:
except
on e : Exception do
begin
MainForm.Log('error in Execute=' + e.Message);
raise;
end;
end;
P.S。从服务器线程访问MainForm不是线程安全的。有许多解决方案可以改进这个代码(TThread.Queue就是其中之一)。