![]() |
Problem mit Indy-FTP (Verzögerung)
Wenn ich mit der idFTP-Komponente von Indy eine Datei ins Internet hochlade, wird der Programmablauf angehalten bis die Datei fertig hochgeladen ist.
Die Datei ist zwar nur paar hundert kilobyte groß, doch "stockt" das Programm - man kann keine Buttons mehr bedienen etc. Kann man diesen Transfer irgendwie "abkoppeln" oder so gestalten, dass das Programm nicht hängt?! Danke schonmal! |
Re: Problem mit Indy-FTP (Verzögerung)
Das beste ist du lagerst das in einen Thread aus.
Such mal nach TThread hier im Forum, bzw. in der Delphi-Hilfe. Es gibt auch noch ein Tutorial auf Luckie seiner Seite (Link is in seiner Signatur zu finden). Gruß Thomas |
Re: Problem mit Indy-FTP (Verzögerung)
Hi,
hast du schon mal die IdAntifreeze Komponente auf deine Form gezogen ? :wink: |
Re: Problem mit Indy-FTP (Verzögerung)
Ich hab jetzt die Komponente hinzugefügt. Muss ich da noch was einstellen oder reicht das, wenn sie einfach da ist?!
Kann ich da trotzdem die Datei "mit einmal" also ohne zerstückeln hochladen? Das sieht nämlich nur so aus:
Delphi-Quellcode:
idFTP.Username:=List.Strings[0];
idFTP.Password:=List.Strings[1]; idFTP.Host:=List.Strings[2]; idFTP.Connect; Try idFTP.Put(Datei,OnlineDatei,False); Finally idFTP.Disconnect; End; Oder muss ich es anders programmieren, denn geholfen hat der Tipp bei mir leider nicht.... |
Re: Problem mit Indy-FTP (Verzögerung)
Es geht ohne Hänger, indem man in dem Ereignis OnWork der idFTP ein
Delphi-Quellcode:
schreibt.
Application.ProcessMessages;
|
Re: Problem mit Indy-FTP (Verzögerung)
Das mit dem ProcessMessages im OnWork klappt schonmal.
Es hängt jetzt zumindest nicht mehr so wie vorher, dass man in der Zeit des Upload gar nichts mehr mit dem Programm anfangen kann. Aber man merkt noch deutlich, dass er beschäftigt ist....soll heißen ich hab auf dem Form z.B. auch ne Uhr-Anzeige die von einem Timer aktualisiert wird--und enstsprechend "überspringt" die Uhr dann 2-3 Sekunden und der Programmablauf ist relativ langsam. Gänzlich weg bekommen kann man das also nicht? |
Re: Problem mit Indy-FTP (Verzögerung)
ganz weg bekommst Du es mit Threads, wenn Du pro Upload/Downloadvorgang
einen separaten Thread startest. Wurde aber schon in einem Beitrag vorher angemerkt. Kleinere Aussetzer bekommst Du wenn Du dem idftp sagst, das er kleinere "Häppchen" übertragen soll. Soweit ich das weiß geht das über den Buffer. Grüße Klaus |
Re: Problem mit Indy-FTP (Verzögerung)
Habe es jetzt in einen Thread gepackt
Jedoch macht er nicht was im Thread steht?!?! Deklarition
Delphi-Quellcode:
Aufruf
FTPUpload = Class(TThread)
Protected Procedure Execute; Override; Private { Private-Deklarationen } Target: ShortString; Remote: ShortString; Public { Public-Deklarationen } End;
Delphi-Quellcode:
Thread
FTPThread:=FTPUpload.Create(False);
FTPThread.Target:='Datei.txt'; FTPThread.Remote:='Datei1.txt';
Delphi-Quellcode:
EDIT: HF ist mein Hauptfenster (also das Stamm-Formular) --> da hab ich ja die Indy-Objekte liegen
Procedure FTPUpload.Execute;
Begin Sleep(44); If FTPACCESS.Text <> '' then Begin HF.FTPSocket.Username:=FTPACCESS.Strings[0]; //FTPACCESS enthält die Zugangsdaten HF.FTPSocket.Password:=FTPACCESS.Strings[1]; HF.FTPSocket.Host:=FTPACCESS.Strings[2]; HF.FTPSocket.Connect; Try HF.FTPSocket.Put(Target,Remote,False); Finally HF.FTPSocket.Disconnect; End; End; DeleteFile(Target); End; |
Re: Problem mit Indy-FTP (Verzögerung)
Was für'n Fehler bekommst Du denn?
Kannst Du den Client nicht zur Laufzeit erzeugen? Hier ein Beispiel dazu: ![]() Grüße Klaus |
Re: Problem mit Indy-FTP (Verzögerung)
Danke nochmal an alle! Es funktioniert jetzt einwandfrei und ohne den kleinsten Ruckler - aber am Upload erkennt man ja, dass er hochlädt....
Es war noch ein kleiner Fehler im TStringList - da stand das Create an der falschen Stelle und somit wurden nie die Zugangsdaten im FTPACCESS übergeben! Ein Hoch auf den Thread *lol* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz