Delphi FireMonkey Indy TIdHttp如何中止?

3phpmpom  于 2022-09-21  发布在  其他
关注(0)|答案(3)|浏览(190)

我使用的是Delphi 10.1柏林更新和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时,我如何中止连接?

0wi1tuuw

0wi1tuuw1#

我不会直接调用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;
ff29svar

ff29svar2#

试着这样做:

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

frebpwbc3#

procedure TMyThread.Execute;
var
  HTTP: TIdHTTP;
begin
  HTTP := TIdHTTP.Create;
  try
    try
     ...
    except
      on E:Exception do ...//do not re-raise it.
    end
  finally
    HTTP.Free;
  end;
end;

尝试捕获线程异常。

相关问题