![]() |
Modales Wartefenster, im Hintergrund läuft Thread
Hallo,
ich hab ein Programm geschrieben, in dem man mehrere Dateien und Ordner auslesen und verarbeiten kann. Da die Verarbeitung ziemlich lange dauert, benötige ich ein modales Fenster, das den Wartezustand anzeigt, während im Hintergrund die Daten verarbeitet werden. Ausserdem soll es einen Abbruchbutton haben, mit dem die Aktion unterbrochen werden kann. Bis jetzt habe ich das mit einem Thread so gelöst:
Delphi-Quellcode:
Das haut so auch meistens gut hin, nur manchmal bleibt das Fenster geöffnet. Ich glaube, dass der Fehler darin liegt, dass der Thread terminiert, bevor das Fenster überhaupt angezeigt wurde. Kann diese Einschätzung stimmen? Und wenn ja wie würdet ihrs angehen?
procedure UserKlicktWas;
ImportFiles:=TImportFilesThread.Create(False); ImportFiles.FreeOnTerminate:=True; ImportFiles.OnTerminate:=ImportFilesTerminate; if Wartefenster.ShowModal = mrCancel then begin ImportFiles.Terminate; end; procedure ImportFilesTerminate; // das fenster wurde durch einen Klick auf Abbrechen geschlossen if not WarteFenster.Showing then MachDieVerarbeitungRückgängig // das WarteFenster wurde noch nicht vom User geschlossen else WarteFenster.Close; JetztBeendeDieVerarbeitung danke schon mal. |
Re: Modales Wartefenster, im Hintergrund läuft Thread
Moin,
ich würde zuerst mal das FreeOnTerminate rauswerfen, denn da kannst Du nicht kontrollieren, in welchem Zustand der Thread beendet und freigegeben wird. Kann sogar sein, daß die Routine zum Schließen gar nicht ausgeführt wird. Nach dem Terminate ist ein Thread.WaitFor sinnvoll, dann musst Du aber in Deinen Routinen zur Datenverarbeitung aber regelmäßig prüfen, ob der Thread terminiert wurde. Aber so kannst Du Deinen Thread sinnvoll beenden. Und ein Fester des HauptThreads aus einem untergeordneten Thread zu schließen ist sowieso nicht unproblematisch. Grüße, Messie |
Re: Modales Wartefenster, im Hintergrund läuft Thread
Mahlzeit!
jo ich machs jetzt so wie du gesagt hast mit manuellem free'n und waitfor(). haut hin. vielen dank! mfg MastaOfDesasta. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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