Einzelnen Beitrag anzeigen

Benutzerbild von Lun
Lun

Registriert seit: 4. Feb 2006
122 Beiträge
 
Delphi 2005 Professional
 
#1

indy idhttp + download abbrechen

  Alt 19. Dez 2006, 10:06
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
  Mit Zitat antworten Zitat