AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Modales Wartefenster, im Hintergrund läuft Thread
Thema durchsuchen
Ansicht
Themen-Optionen

Modales Wartefenster, im Hintergrund läuft Thread

Ein Thema von mastaofdesasta · begonnen am 21. Mai 2007 · letzter Beitrag vom 22. Mai 2007
Antwort Antwort
mastaofdesasta

Registriert seit: 13. Sep 2006
8 Beiträge
 
#1

Modales Wartefenster, im Hintergrund läuft Thread

  Alt 21. Mai 2007, 12:53
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.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Modales Wartefenster, im Hintergrund läuft Thread

  Alt 22. Mai 2007, 08:56
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
  Mit Zitat antworten Zitat
mastaofdesasta

Registriert seit: 13. Sep 2006
8 Beiträge
 
#3

Re: Modales Wartefenster, im Hintergrund läuft Thread

  Alt 22. Mai 2007, 13:10
Mahlzeit!

jo ich machs jetzt so wie du gesagt hast mit manuellem free'n und waitfor(). haut hin. vielen dank!

mfg MastaOfDesasta.
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:39 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