Delphi FireMonkey Indy TIdHttp如何中止?

时间:2017-02-19 11:05:35

标签: delphi firemonkey indy

我正在使用Delphi 10.1 Berlin更新和Indy的TIdHttp组件。 我通常使用以下代码中止连接:

procedure TMyThread.OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: int64);
begin
    if abort then (asender as tidhttp).Disconnect;
end;

这在VCL应用程序中也可以正常工作,只要平台是Windows,也可以在FireMonkey应用程序中使用。当我将此代码用作MacOS作为目标时,它会立即关闭我的应用程序,而不会显示错误消息或显示任何内容。

所以我的问题是我做错了什么,当平台是MacOS时如何中止连接?

2 个答案:

答案 0 :(得分:4)

而不是直接调用Disconnect()并将套接字连接从TIdHTTP转出,我会引发异常,例如调用SysUtils.Abort(),让TIdHTTP或调用请求完全中止后,线程关闭套接字。

procedure TMyThread.OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: int64);
begin
  if Self.Abort then SysUtils.Abort;
end;

procedure TMyThread.Execute;
var
  HTTP: TIdHTTP;
begin
  HTTP := TIdHTTP.Create;
  try
    ...
  finally
    HTTP.Free;
  end;
end;

答案 1 :(得分:0)

尝试这样:

procedure TMyThread.OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: int64);
begin
  try  
    if abort then (asender as tidhttp).Disconnect;
  except
  end;
end;