Zitat von
Tryer:
Da ich nichts von {APPTYPE CONSOLE} und WriteLn - Ausgaben sehe: Hast Du den abwechselnden Aufruf beim Debuggen vielleicht mit Haltepunkten hervorgerufen? Vielleicht kommt das Formular dank zahlreicher Sync-Anfragen garnicht zum neuzeichnen. Ob die Position sich überhaupt ändert könnte vermutlich ein nachgeschaltetes ProcessMessages zeigen.
Ich habe schon ProcessMessages eingebaut, als auch mal ein Sleep, weil ich mir das gleiche wie du auch schon dachte
aber es nützt nichts.
Ich sehe aber, dass diese Procedur angesprungen wird, bzw. durchlaufen wird
aber die Progressbar geht nicht.
Ich hab auch mal versucht, ein Label beschreiben zu lassen, aber auch das passiert erst, wenn der Thread zu ende ist
[Edit]
Ich hab jetzt mal einen Test gemacht und hab festgestellt, dass sich da irgendwas "ansammelt". Denn, wenn ich im Thread
nach der try/finally-Block ein Sleep(10000) einsetzt, dann seh ich dass die Progressbar auf einmal aufgebaut wird und
danach erst beendet sich der Thread (nach Ablauf der Sleep-Zeit).
Delphi-Quellcode:
procedure TThreadUnit.Execute;
var
b_Allgemein: Boolean;
b_Kanal : Boolean;
b_Achse : Boolean;
b_Antrieb : Boolean;
b_Anzeige : Boolean;
StringList_NCUpgrade: TStringList;
begin
inherited;
//Variablen leeren
i_Anzahl_Allgemein := 0;
i_Anzahl_Kanal := 0;
i_Anzahl_Achse := 0;
i_Anzahl_Antrieb := 0;
i_Anzahl_Anzeige := 0;
//NC-Upgradefile als String holen
Synchronize(NCUpgrade_holen);
//Maschinendaten-Auswahl holen
Synchronize(MDAuswahl_holen);
//Variablen beschreiben
b_Allgemein := (i_MDAuswahl and 1) = 1;
b_Kanal := (i_MDAuswahl and 2) = 2;
b_Achse := (i_MDAuswahl and 4) = 4;
b_Antrieb := (i_MDAuswahl and 8) = 8;
b_Anzeige := (i_MDAuswahl and 16) = 16;
//StringList erzeugen
StringList_NCUpgrade := TStringList.Create;
try
StringList_NCUpgrade.Text := S_NCUpgrade;
//wenn die CheckBox "Allgemein" aktiv ist, dann die MD´s "Allgemein" auslesen
If b_Allgemein then
begin
i_Anzahl_Allgemein := Allgemein_Maschinendaten_auslesen(StringList_NCUpgrade);
Synchronize(MDAuslesen_fertig);
end;
//wenn die CheckBox "Kanal" aktiv ist, dann die MD´s "Kanal" auslesen
If b_Kanal then
begin
i_Anzahl_Kanal := Kanal_Maschinendaten_auslesen(StringList_NCUpgrade);
Synchronize(MDAuslesen_fertig);
end;
//wenn die CheckBox "Achs" aktiv ist, dann die MD´s "Achs" auslesen
If b_Achse then
begin
i_Anzahl_Achse := Achs_Maschinendaten_auslesen(StringList_NCUpgrade);
Synchronize(MDAuslesen_fertig);
end;
//wenn die CheckBox "Antrieb" aktiv ist, dann die MD´s "Antrieb" auslesen
If b_Antrieb then
begin
i_Anzahl_Antrieb := Antrieb_Maschinendaten_auslesen(S_NCUpgrade);
Synchronize(MDAuslesen_fertig);
end;
//wenn die CheckBox "Anzeige" aktiv ist, dann die MD´s "Anzeige" auslesen
If b_Anzeige then
begin
i_Anzahl_Anzeige := Anzeige_Maschinendaten_auslesen(StringList_NCUpgrade);
Synchronize(MDAuslesen_fertig);
end;
finally
//StringList löschen und freigeben
FreeAndNil(StringList_NCUpgrade);
end;
sleep(10000);
//mit MainForm-Procedure synchronisieren
Synchronize(fertig);
end;