![]() |
Thread: Funktion am Ende wird nicht ausgeführt
Hallo,
ich habe ein TThread-Objekt mit folgender Execute-Methode:
Code:
Die Funktion frmCopyFromCD.ripNextTrack() sieht folgendermaßen aus:
procedure TtrdRipAudioCD.Execute;
begin // [...] Hier steht sonst der Code zum Rippen eines Audio-Tracks von einer CD frmCopyFromCD.ripNextTrack(self.trackNr); end;
Code:
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.
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; 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 |
Re: Thread: Funktion am Ende wird nicht ausgeführt
Die VCL ist nicht threadsafe und das bekommst du mit deiner ShowMessage zu spüren. Nimm eine MessageBox und du solltest sie sehen. Zu deinem anderen Problem, was willst du eigentlich machen? Warum übergibst du dem Thread nicht gleich eine Liste der abzuarbeitenden Dateien?
|
Re: Thread: Funktion am Ende wird nicht ausgeführt
Zitat:
Ooh... :shock: Ich glaube, mir leuchtet da grad was ein: Wenn ich frmCopyFromCD.ripNextTrack() aufrufe, wird der Code quasi im Thread ausgeführt und nicht in frmCopyFromCD... D.h. ich muss den Code einfach nur in eine Synchronize-Methode einbauen... Warum bin ich da nicht früher drauf gekommen?! Ich dachte, es wird ein Fehler angezeigt, wenn er nicht auf die VCL zugreifen kann :wall: Naja... Vielen Dank - wieder eines der für mich zuerst völlig unlösbar scheinenden Probleme gelöst :hello: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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