AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Form reagiert nicht während idftp1.get trotz application.processmessages
Thema durchsuchen
Ansicht
Themen-Optionen

Form reagiert nicht während idftp1.get trotz application.processmessages

Ein Thema von gee21 · begonnen am 12. Jul 2014 · letzter Beitrag vom 15. Jul 2014
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#1

Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 12. Jul 2014, 18:42
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 application.processmessages einfügen um die form1 ansprechbar zu halten. Leider bringt es kein Effekt / Form1 reagiert einfach nicht.

Habe dann zum testen diverse stellen mit application.processmessages 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)

Weiss jemand wie ich form1 ansprechbar lassen kann?
Robert
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 12. Jul 2014, 20:26
Zieh dir mal eine Bei Google suchenTIdAntiFreeze-Komponente auf die Form.
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 12. Jul 2014, 21:00
diese komponente gibt's eben für Android Anwendungen leider nicht.
Robert
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 12. Jul 2014, 21:17
Schau mal hier: http://www.delphipraxis.net/1253064-post7.html
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 12. Jul 2014, 21:55
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 ) http://www.delphipraxis.net/1253064-post7.html

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;
Robert
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 00:56
Ich habe in einer meiner Apps den Aufruf von TIdHTTP in einen Thread ausgelagert. Damit funktioniert die Anzeige mit dem TAniIndicator hervorragend.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 12:43
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 http://docwiki.embarcadero.com/RADSt...ngen_erstellen

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:
 geetest.Create(False); Dann gibt es aber eine Exception Meldung (Access Violation at Adress 61B3D93C, accessing adress 00000000)




In diesem "Thread Formular" habe ich nun folgendes drinn: (Vermutlich ziemlich alles falsch )

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.
Robert

Geändert von gee21 (13. Jul 2014 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 13:06
[OT]Autsch[/OT]

Ich nehme zwar kein FTP, sondern http... Aber die Funktionalität ist ja fast die selbe...


Delphi-Quellcode:
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;
Mavarik
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 13:22
[OT]Autsch[/OT]

Ich nehme zwar kein FTP, sondern http... Aber die Funktionalität ist ja fast die selbe...


Delphi-Quellcode:
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;
Mavarik

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?
Robert
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Form reagiert nicht während idftp1.get trotz application.processmessages

  Alt 13. Jul 2014, 13:36
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz