![]() |
Thread wird nicht ausgeführt
Hallo,
ich lasse in einer Schleife mehrere Reports drucken (bis zu 100 Stück) - hier handelt es sich um ein Mahnwesen-Plugin. Nun möchte ich, dass während dem Druck die Form2 angezeigt und ständig neu gezeichnet wird. Es ist eine "Bitte-warten"-Form mit einer UbuntuProgressBar. Dazu habe ich einen simplen Thread gebaut. Hier mal der Code.
Delphi-Quellcode:
Wenn ich in der Execute-Methode beide Methoden mit Synchronize aufrufe tut sich garnichts. Keine Form poppt auf, keine Message. Rufe ich eine / oder beide Methode ohne Synchronize auf, poppt Form2 und die MessageBox auf, aber erst nachdem der Druckvorgang abgeschlossen ist.
TRefreshThread = class(TThread)
private public Form: TForm; kill: Boolean; protected procedure ShowForm; procedure doRefresh; procedure Execute; override; end; procedure TRefreshThread.ShowForm; begin ShowMessage('SD'); Form2.Visible:=True; end; procedure TRefreshThread.doRefresh; begin while not (kill) do begin Form2.Refresh; Form2.Repaint; end; end; procedure TRefreshThread.Execute; begin ShowForm; //Fehlerbeschreibung weiter unten Synchronize(doRefresh); //Fehlerbeschreibung weiter unten end; //Aufruf: procedure .... var ... begin rt:=TRefreshThread.Create(True); rt.kill:=False; rt.Form:=Form2; rt.Resume; ... end; Was mache ich falsch? Das müsste doch so funktionieren? Vielen Dank |
Re: Thread wird nicht ausgeführt
dein Thread beendet sich ja sofort wieder.
[edit2] nein tut er nicht, er verharrt in der Schleife von doRefresh.
Delphi-Quellcode:
vielleicht funktioniert es ja so:
procedure TRefreshThread.Execute;
begin ShowForm; //Fehlerbeschreibung weiter unten Synchronize(doRefresh); //Fehlerbeschreibung weiter unten end;
Delphi-Quellcode:
procedure TRefreshThread.Execute;
begin ShowForm; //Fehlerbeschreibung weiter unten while not terminated do begin Synchronize(doRefresh); //Fehlerbeschreibung weiter unten sleep(250); end; end; [edit] das do refresh dann so umbauen:
Delphi-Quellcode:
Grüße
procedure TRefreshThread.doRefresh;
begin Form2.Refresh; Form2.Repaint; end; Klaus |
Re: Thread wird nicht ausgeführt
ShowForm sollte aber auch synchronisiert werden, es wird ja auf die Form zugegriffen.
|
Re: Thread wird nicht ausgeführt
Ja, habe ich ja gemacht. Ich wollte damit nur zeigen, dass ShowForm nur dann aufgerufen wird, wenn ich kein Synchronize verwende. Verwende ich dieses, wird ShowForm auch nicht aufgerufen. Warum auch immer...
Ich habe die vorgeschlagene Codeänderung übernommen, und funktioniert auch nicht. Was mir gerade einfällt. Wenn ich komplett ohne Synchronize arbeite, dann funktioniert alles. Kann das daran liegen, dass das Mahnungsmodul eine DLL-Form ist, die dynamisch vom Hauptprogramm geladen wird? Ohne Synchronize funktioniert das einwandtfrei und ohne Fehler. Kann so sogar die VCL ändern. Mit Synchronize geht es garnicht -> kein Methodenaufruf möglich. |
Re: Thread wird nicht ausgeführt
|
Re: Thread wird nicht ausgeführt
Ok, habe ihn gelesen. Werde es genauso machen, wie siruis es vorgeschlagen hat. Allerdings schiebe ich das ein bissl auf ;)
Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 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 by Thomas Breitkreuz