delphi – 如何在AContext.Connection.Disconnect之后从无限执行中停止TCPServer OnExecute事件?

我有这个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就是其中之一).

点赞