如何使用TIdHTTP停止(取消)下载

Sal*_*dor 4 delphi indy

我正在TIdHTTP.Get 线程中使用该过程来下载文件.我的问题是我如何停止(取消)下载文件?

小智 10

我会尝试通过在TIdHTTP.OnWork事件中使用Abort方法抛出静默异常来取消它.此事件会因读/写操作而触发,因此在下载过程中也会触发此事件.

type
  TDownloadThread = class(TThread)
  private
    FIdHTTP: TIdHTTP;
    FCancel: boolean;
    procedure OnWorkHandler(ASender: TObject; AWorkMode: TWorkMode; 
      AWorkCount: Integer);
  public
    constructor Create(CreateSuspended: Boolean);
    property Cancel: boolean read FCancel write FCancel;
  end;

constructor TDownloadThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  FIdHTTP := TIdHTTP.Create(nil);
  FIdHTTP.OnWork := OnWorkHandler;
end;

procedure TDownloadThread.OnWorkHandler(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
  if FCancel then
  begin
    FCancel := False;
    Abort;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

或者如此处所述,对于直接断开连接,您可以在同一事件中使用Disconnect方法.

procedure TDownloadThread.OnWorkHandler(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
  if FCancel then
  begin
    FCancel := False;
    FIdHTTP.Disconnect;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

  • 您无法在中途中止请求并希望保持连接处于打开状态,您不知道您要离开套接字的状态或已传输的数据.无法清除HTTP连接并将其保持打开状态以获取新请求.唯一明智的做法是关闭连接. (2认同)

opc*_*0de 5

您可以使用默认过程 idhttp1.Disconnect...