I would try to undo it by throwing a silent exception using the Abort method in the TIdHTTP.OnWork event . This event is fired for read / write operations, so it is also fired during the boot process.
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;
Or, as mentioned here, for a direct disconnect, you can use the Disconnect method in the same case.
procedure TDownloadThread.OnWorkHandler(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); begin if FCancel then begin FCancel := False; FIdHTTP.Disconnect; end; end;
user532231
source share