Hallo,
ich habe ein TThread-Objekt mit folgender Execute-Methode:
Code:
procedure TtrdRipAudioCD.Execute;
begin
// [...] Hier steht sonst der Code zum Rippen eines Audio-Tracks von einer CD
frmCopyFromCD.ripNextTrack(self.trackNr);
end;
Die Funktion frmCopyFromCD.ripNextTrack() sieht folgendermaßen aus:
Code:
procedure TfrmCopyFromCD.ripNextTrack(lastRippedTrack:Integer);
var i:Integer;
anotherChecked,isChecked:Boolean;
begin
anotherChecked := false;
lastRippedTrack := lastRippedTrack+1;
for i:=lastRippedTrack+1 to length(currentCD.songs) do begin
sgrSongs.GetCheckBoxState(0, i, isChecked);
if isChecked then begin
ripAudioCD := TtrdRipAudioCD.Create(true);
ripAudioCD.setTrackNr(i-1);
ripAudioCD.setDrive(cbxDrives.ItemIndex);
ripAudioCD.Resume;
anotherChecked := true;
break;
end;
end;
if not anotherChecked then
showMessage('Alle ausgewählten Tracks gerippt!');
end;
Diese Methode wird jedoch scheinbar nicht ausgeführt. Jedenfalls passiert nichts. Auch, wenn ich probeweise nur ein showMessage('blabla') ausführen lasse, passiert nichts. Wenn ich das Programm dann schließe, bekomme ich noch einen Fehler angezeigt "Error Code 1400 Ungültiges Fensterhandle". Über die Suche habe ich herausgefunden, dass das damit zusammenhängt, dass der Thread wohl nicht richtig beendet wurde.
Ich muss dazu sagen, dass die Variable "ripAudioCD" auch der aktuell ausgeführte Thread ist. Da dachte ich sofort, daran, dass ich ja versuche, ripAudioCD wider neu zu belegen, obwohl der Thread noch ausgeführt wird. Aber warum passiert dann selbst nichts, wenn ich NUR showMessage(), ohne andere Befehle, ausführen lasse?!
Ich hoffe, jemand kann mir helfen.
Danke schonmal!
Johannes