Как остановить (отменить) загрузку с помощью TIdHTTP - PullRequest
4 голосов
/ 03 августа 2011

Я использую процедуру TIdHTTP.Get в потоке, чтобы загрузить файл.У меня вопрос, как я могу остановить (отменить) загрузку файла?

Ответы [ 2 ]

10 голосов
/ 03 августа 2011

Я бы попытался отменить его, выдав исключение без вывода сообщений с использованием метода Abort в событии TIdHTTP.OnWork . Это событие вызывается для операций чтения / записи, поэтому оно также запускается в процессе загрузки.

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;

Или, как уже упоминалось, для прямого отключения вы можете использовать метод Disconnect в том же событии.

procedure TDownloadThread.OnWorkHandler(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
  if FCancel then
  begin
    FCancel := False;
    FIdHTTP.Disconnect;
  end;
end;
3 голосов
/ 03 августа 2011

Вы можете использовать процедуру по умолчанию idhttp1. Disconnect ...

...