我有这个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.我做错了什么以及如何在输入AContext.Connection.Disconnect后停止执行TCPServerExecute?
最佳答案 循环继续,因为Indy异常未正确处理.
删除异常处理程序,或在记录后重新引发异常:
except
on e : Exception do
begin
MainForm.Log('error in Execute=' + e.Message);
raise;
end;
end;
附:从服务器线程访问MainForm不是线程安全的.有许多解决方案可以改进此代码(TThread.Queue就是其中之一).