Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Modales Wartefenster, im Hintergrund läuft Thread (https://www.delphipraxis.net/92502-modales-wartefenster-im-hintergrund-laeuft-thread.html)

mastaofdesasta 21. Mai 2007 11:53


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:
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
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?

danke schon mal.

messie 22. Mai 2007 07:56

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

mastaofdesasta 22. Mai 2007 12:10

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