Thema: Delphi Download (Thread)

Einzelnen Beitrag anzeigen

Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#6

Re: Download (Thread)

  Alt 5. Mär 2004, 14:19
Hallo devnull,

das ist alles äusserst schlecht, was Du da machst.
Wenn Du urlDownloadFile in einem Thread aufrufst, wird auf DownloadThread.UpdateForm1; in diesem Thread aufgerufen.
Und da Du in UpdateForm auf die VCL zugreifst (Buttons, Labels) MUSS dieser Aufruf mit Synchronize erfolgen.!
Undbedingt.
Noch viel Besser wäre natürlich, wenn Du ein Update Event einrichtest.
Was ist, wenn Du diesen DownloadThread nochmal verwenden willst, aber z.B. mit einem ganz anderen Form ?

Du solltest Dir also ein Status Event einrichten. Und das aktualisieren von Buttons übernimmt das FORM SELBER !

TDownStatusEvent = procedure( sender : Tobject; progress, progressmax, status : integer) of object;

Nun zu Deinem Problem.

Das

Code:
BINDSTATUS_ENDDOWNLOADDATA : begin
        PagesDlg1.Label4.Caption := 'Download "'+fileinfo+'" fertiggestellt ...';
        DownloadThread.UpdateForm1;
    end;
ist nur ne MEldung, da ist Dein Download noch nicht zu ENDE.

Du musst also in BINDSTATUS_ENDDOWNLOADDATA eine Variable "FERTIG" setzen.
Und dann

Code:
try
   UrlDownloadtoFile(nil, PCHAR(runterladen), PCHAR(speichernals), 0, CDownStatus);
  if not abgebrochen or sonstwas and fertig then
   begin
    if MessageDlg ('Programm beenden und Update entpacken ?',mtConfirmation,[mbYes,mbNo],0)
        = mrNo then exit;
    ShellExecute(self.Handle, NIL, pchar(speichernals),'','',SW_SHOWNORMAL);
    halt;
   end;


  finally
    cDownStatus.Free;
  end;
  Mit Zitat antworten Zitat