![]() |
Form reagiert nicht während idftp1.get trotz application.processmessages
Hallo
Meine Android App lädt Daten von einem FTP Server herunter.
Delphi-Quellcode:
for i4 := 0 to filelistFINAL.Count-1 do begin
if stop=false then begin progressbar1.value:=i4+1; try form2.idftp1.Get(filelistFINAL[i4], gethomepath+'/Temp/'+filelistFINAL[i4],true); except end; end; end; Auf FORM1 möchte ich nun dem Nutzer mit einem Button die Möglichkeit geben diese Download's abzubrechen. Leider ist aber Form1 während des Downloads komplett eingefroren, so das mein "Abbruch Code" gar nicht ausgeführt werden kann. Deshalb habe ich gedacht ich könnte zB in idftp on work
Delphi-Quellcode:
einfügen um die form1 ansprechbar zu halten. Leider bringt es kein Effekt / Form1 reagiert einfach nicht.
application.processmessages
Habe dann zum testen diverse stellen mit
Delphi-Quellcode:
versucht aber egal wo ich es hinn pflanze, form1 reagiert einafch nicht. (Versucht habe ich es zB in einem Timer, idftp OnWork, on Workbegin/end, in der Schlaufe des idftp.get Downloads)
application.processmessages
Weiss jemand wie ich form1 ansprechbar lassen kann? |
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
Zieh dir mal eine
![]() |
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
diese komponente gibt's eben für Android Anwendungen leider nicht.
|
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
Schau mal hier:
![]() |
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
Hmmm. Also ich weiss nicht. Vermutlich mache ich es falsch :(
Habe mir das Beispiel einmal heruntergeladen und versucht es zu übernehmen. (Alles was ich nicht verstanden habe, habe ich einfach weggelassen :oops::oops: ) ![]() Aber ich glaube das so wie ich das gemacht habe, läuft alles genau "gleich ab". Nur das der Code oben in einer Procedure steht.
Delphi-Quellcode:
procedure geeTest(Source: string; dest: string);
begin try form2.idftp1.get(source, dest, true); sleep(400); application.ProcessMessages; except end; end;
Delphi-Quellcode:
for i4 := 0 to filelistFINAL.Count-1 do begin
if stop=false then begin progressbar1.value:=i4+1; try geetest(filelistFINAL[i4],gethomepath+'/Temp/'+filelistFINAL[i4]); except end; end; end; |
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
Ich habe in einer meiner Apps den Aufruf von TIdHTTP in einen Thread ausgelagert. Damit funktioniert die Anzeige mit dem TAniIndicator hervorragend.
|
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
Danke für eure Antworten.
Könnt ihr mir evt etwas helfen mit diesem Thread. Habe das bis jetzt noch nie gemacht. Also mit Google und DocWiki ![]() Habe ich in Delphi unter: Datei->NEU->Andere->Thread Object ein neues "Thread Formular erstellt" das heisst nun threadtest.pas Das Programm startet nun und ich versuche auf Form1 diesen "Thread Code" so aufzurufen:
Delphi-Quellcode:
Dann gibt es aber eine Exception Meldung (Access Violation at Adress 61B3D93C, accessing adress 00000000)
geetest.Create(False);
In diesem "Thread Formular" habe ich nun folgendes drinn: (Vermutlich ziemlich alles falsch :oops:)
Delphi-Quellcode:
unit threadtest;
interface uses System.Classes, f1diashow, System.SysUtils; type geetest = class(TThread) protected procedure Execute; override; end; implementation procedure geetest.Execute; begin NameThreadForDebugging('threadgee'); { Place thread code here } form1.idftp1.get(filelistFINAL[i4],gethomepath+'/Temp/'+filelistFINAL[i4], true); end; end. |
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
[OT]Autsch[/OT]
Ich nehme zwar kein FTP, sondern http... Aber die Funktionalität ist ja fast die selbe...
Delphi-Quellcode:
Mavarik
Procedure Foo;
var URL, Dateiname : String; begin URL := 'Http://www.meinserver.de/Datei.png'; Dateiname := 'C:\Hierhin\Datei.png'; lThread := TAnonymousThread<boolean>.Create( function: boolean var idhttp : TidHttp; FS : TFileStream; DN : String; begin DN := Dateiname; result := true; if not(fileExists(DN)) then begin FS := TFileStream.Create(DN,fmCreate); try idhttp := Tidhttp.Create; try idhttp.Get(URL,FS); finally idhttp.Free; end; finally FS.Free; end; end; end, procedure(AResult: Boolean) begin end, procedure(AException: Exception) begin //Runs in main thread //ShowMessage(AException.Message); end); end; |
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
Zitat:
Also will mich jetzt wirklich nicht quer stellen. Aber wo hast du nun diesen Code drinn? In dem neuen Thread? oder auf der zB Form1? |
AW: Form reagiert nicht während idftp1.get trotz application.processmessages
Nur kurz zur Erklärung, damit beim nächsten mal nicht wieder gefragt wird. Die Methode Get kehrt erst zurück, wenn sie fertig ist. Da kannst da du vor und danach so oft die Messageque abarbeiten wie du willst, die Methode wird dir trotzdem dein Programm blockieren. Wenn dann müsste das Apploication.ProcessMessages in die Get Methode rein. Da du aber da keinen Einfluss drauf hast, hilft es nur die Methode in einen separaten Thread auszulagern.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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