Einen Cancelbefehl gibt es nicht.
Das hier führt auch nicht zum Erfolg. Es dauert immer circa 19 Sekunden bis das Programm beendet wird.
Delphi-Quellcode:
type
THTTPObject =
class(TIdHTTP)
private
FCanceled: Boolean;
IOHndl: TIdSSLIOHandlerSocketOpenSSL;
procedure FOnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
public
constructor Create(AOwner: TComponent);
destructor Destroy;
override;
published
property Canceled: Boolean
read FCanceled
write FCanceled;
end;
implementation
constructor THTTPObject.Create(AOwner: TComponent);
begin
inherited;
FCanceled := False;
IOHndl := TIdSSLIOHandlerSocketOpenSSL.Create(
nil);
Request.BasicAuthentication := True;
HandleRedirects := False;
IOHandler := IOHndl;
ReadTimeout := 10000;
OnWork := FOnWork;
end;
procedure THTTPObject.FOnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
if FCanceled
then
begin
raise Exception.Create('
Disconnect');
Disconnect;
end;
end;
Delphi-Quellcode:
aHTTP.Canceled := True;
_Thread.Terminate; // Wird respektiert: "einen Thread kann/darf man niemals von außen "beenden". Man muß immer dem Thread, bzw. dem Code darin, sagen, dass er sich beenden soll."