Hallo zusammen,
ich versuche in meinem Download Manager eine idhttp Verbindung abzubrechen. Um mein Ziel zu erreichen verwende ich
diese Möglichkeit. Das funktioniert soweit auch, also ich lade etwas beim ersten mal erfolgreich runter, danach starte ich ein
Download und breche dieses ab. Danach wird auch die Verbindung abgebrochen und das File gelöscht.
Problem wenn ich dann einen neuen link anklicke um eine Datei aus meinem Programm runterzuladen, wird mir eine Pointer
Exception ausgeschmissen. Konkret an dieser stelle:
Delphi-Quellcode:
procedure TForm2.display();
var
typ :
String;
name :
String;
link :
String;
begin
//abbrechen ist in dem fall das cancel aus dem vorigen Post.
abbrechen := false;
//Progressbar wird auf 0 gesetzt (Reset) und der link geholt
ProgressBar1.Position := 0;
link := self.getLink();
//wenn der link ungleich leer ist, zeige die Details an
if (link <> '
')
then begin
IdHTTPblub.Head(link);
//Hier tritt die Exception auf, das erstemal wenn die idHttpblub wieder angesprochen wird nachdem //Abbruch.
Den Unterschied den ich habe ist das ich ein finally habe anstatt ein except und eine Schleife im try block ist.
Delphi-Quellcode:
try
repeat
// Damit sich das Programm nicht aufhängt
Application.ProcessMessages;
//Nun setzen wir den Start nach den bereits kopierten Bytes
IdHTTPblub.Request.ContentRangeStart := BytesKopiert;
//Hier wird geprüft ob die restlichen Bytes größer sind als cFileSplitSize
if (BytesInsgesamt-BytesKopiert) > cFileSplitSize then
begin
//Hier wird einmal die cFileSplitSize eingestellt (die Konstante)
IdHTTPblub.Request.ContentRangeEnd := BytesKopiert+cFileSplitSize-1;
end
//Den Rest der Datei
else IdHTTPblub.Request.ContentRangeEnd := BytesInsgesamt;
Application.ProcessMessages;
//Den eingestellten Teil herunterladen und in die Datei speichern
IdHTTPblub.Get(link, lStream);
//Progress und Status aktualisieren
ProgressBar1.Position := BytesKopiert;
//BytesKopiert weiter setzen
BytesKopiert := BytesKopiert+cFileSplitSize;
until (BytesKopiert >= BytesInsgesamt); //Schleife beenden wenn datei fertig
finally
if Assigned(lStream) then lStream.Free; //FileStream freigeben wenn gesetzt
if (abbrechen = true) then deleteFile(pfadundDatei); //wenn abbrechen true ist wird datei gelöscht
end;
Das funktioniert auch soweit aber, danach kommt der aufruf von oben display() den ich per klick auf einen weiteren link ausführe und ich bekomme die Pointer
Exception sobald ich idHttpblub
anspreche.
Hat jemand eine Ahnung wie es dazu kommt? Oder vielleicht ist die lösung um eine idhttp Connection abzubrechen auch nicht so günstig gewählt. Und ich sollte vielleicht eine andere nehmen?
greetz Lun