Da ich mit threads aber kaum Erfahrung habe, bekomme ich damit leider keine funktionierende SyncThreadedDownload
Unit hin.
Der Quelltext ist doch komplett fertig inkl. Beispiel zur Nutzung. Da du nicht geschrieben hast, was du damit gemacht hast und welche Fehler dann kamen, kann man dazu auch schlecht etwas sagen.
Wenn du den Code in eine separate
Unit packen möchtest, musst du die Funktion natürlich unter interface deklarieren, damit sie aus anderen Units sichtbar ist:
Delphi-Quellcode:
unit SyncThreadedDownload;
interface
uses
System.RTLConsts, System.SysUtils, System.Classes, System.Net.HttpClient, System.Net.URLClient;
type
TDownloadCompleteEvent = reference
to procedure(
const URL:
String; Stream: TStream; Error:
Exception);
procedure ThreadedDownloadFile(
const URL:
String; OnDownloadComplete: TDownloadCompleteEvent);
implementation
procedure ThreadedDownloadFile(
const URL:
String; OnDownloadComplete: TDownloadCompleteEvent);
begin
...
end;
end.
Dann schreibst du die
Unit SyncThreadedDownload dort, wo du sie nutzen möchtest, unter uses. Dann kannst du einfach das Beispiel von himitsu 1:1 verwenden:
Delphi-Quellcode:
ThreadedDownloadFile('
http://sonst.wo/dat.ei',
procedure(
const URL:
String; Stream: TStream; Error:
Exception)
begin
if Assigned(Stream)
then begin // if not Assigned(Error) then
Machwas(Stream);
ShowMessage('
Download complete: ' +
URL);
end;
end);
Statt Machwas(Stream) musst du natürlich den heruntergeladenen Stream mit den Daten verwenden, um die Datei z.B. zu verarbeiten oder zu speichern. Und natürlich musst du auch die korrekte Adresse der Datei eintragen.