![]() |
system.zip "Freeze" verhindern?
Grüezi zusammen.
Kleine Frage an euch. Ich entpacke zip Dateien mit der integrierten system.zip Funktion.
Delphi-Quellcode:
Mein Problem ist jedoch das beim entpacken das ganze Programm einfriert bis es fertig entpackt ist.
function UnZipFile(ArchiveName, Path: String): boolean;
var Zip:TZipFile; begin Zip:=TZipFile.Create; try zip.Open(ArchiveName,zmRead); zip.ExtractAll(Path); zip.Close; result:=true; except result:=false; end; zip.Free; end; Ich habe bereits etwas herum getestet mit:
Delphi-Quellcode:
und auch mit der Doublebuffered Funktion für Forms/Panels.
application.ProcessMessages;
Jedoch leider ohne Erfolg. Weiss jemand von euch wie man das "einfach" hinkriegen könnte? |
AW: system.zip "Freeze" verhindern?
Es müsste doch ein Ereignis OnProgress (
![]() Wenn Du darin 'ne Fortschrittsanzeige machst, sollte das Programm doch eigentlich nicht einfrieren. |
AW: system.zip "Freeze" verhindern?
Ganz einfach: Mit einem Thread oder (noch einfacher) einem
![]() |
AW: system.zip "Freeze" verhindern?
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Habe nun das ganze versucht mit einem Task. Dies funktioniert teilweise. Die Form reagiert und zb ein Animiertes Gif bewegt sich nun während des Entpackens / während des Tasks. (Dies war ja mein Ziel) Ist der Task jedoch fertig, so sind alle Objekte auf der Form (zb RadioGroup oder die Images) komplett "kapput" die Farben verändern sich ganz merkwürdig und Schriftarten verschwinden. etwa 30 sek später stürzt das Programm dann ab (reagiert nicht mehr) (Siehe Bild) Weisst du oder sonst jemand was ich falsch mache? Ich habe dieses Beispiel übernommen:
Delphi-Quellcode:
var
aTask: ITask; begin aTask := TTask.Create (procedure () var ... ... begin //Hier kommt dann der Code zum entpacken des Zip Files end); aTask.Start; end; |
AW: system.zip "Freeze" verhindern?
Du greifst in dem Task/Thread aber nicht zufällig unsynchronisiert auf die GUI (die Edits, Label, ...) zu? :stupid:
Ach ja,
Delphi-Quellcode:
"Fehlerbehandlung ... setzen 6"
except
result:=false; end; |
AW: system.zip "Freeze" verhindern?
Habe mir System.zip noch nicht angeschaut.
Aber kannst du nicht einzelne Dateien extrahieren? Also anstelle von zip.ExtractAll ? Ich denke nur dann kannst du ein application.ProcessMessages verwenden. Und ein einfrieren deiner Anwendung verhindern. gruss |
AW: system.zip "Freeze" verhindern?
Zitat:
Zitat:
|
AW: system.zip "Freeze" verhindern?
Zitat:
Ich habe dir die Lösung genannt. gruss |
AW: system.zip "Freeze" verhindern?
Hallo,
< doch ich glaube das tue ich leider schon. > Synchronize benutzen. |
AW: system.zip "Freeze" verhindern?
So hat zwar etwas gedauert aber jetzt habe ich immerhin schon mal teilweise etwas geschafft.
Danke euch dafür sehr. Mein Problem im Moment ist allerdings, dass ich es zwar schaffe den Thread komplett durchlaufen zulassen. (Dafür benutze ich
Delphi-Quellcode:
) ich habe aber bemerkt das der Code im Mainthread nicht auf den Thread wartet und den nachfolgenden Code sofort ausführt (Also hier im Beispiel: Code2).
waitfor;
Gibt es eine einfache Möglichkeit den "code2" erst nach dem Thread Ende durchzuführen? Im Moment versuche ich dass so: MAINTHREAD:
Delphi-Quellcode:
TForm1.Button1Click(Sender: TObject);
begin code1.. code1.... code1...... TMyThread1.Create(False); code2.. code2.... code2..... end; THREAD
Delphi-Quellcode:
type
TMyThread1 = class(TThread) procedure Execute; override; end; procedure TMyThread1.Execute; var i: Integer; begin if directoryexists(form3.Edit1.Text+'res_mods\'+wotversion) then TDirectory.Delete(form3.Edit1.Text+'res_mods\', true); forcedirectories(form3.Edit1.Text+'res_mods\'+wotversion); tdirectory.copy(ExtractFilePath(Application.Exename)+'deff\res_mods',form3.Edit1.Text+'res_mods'); if directoryexists(ExtractFilePath(Application.Exename)+'inf') then TDirectory.Delete(ExtractFilePath(Application.Exename)+'inf', true); forcedirectories(ExtractFilePath(Application.Exename)+'inf'); synchronize(Thread1sync); waitfor; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 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