Moin...
Zitat:
Ein Task, der in einem Thread läuft und der MainThread sind bei mir zwei Threads.
...er hat Recht.
Zitat:
Wird irgendwo von DirList ein TThread.Synchronize aufgerufen? Nein? Dann ist das die Ursache für den DeadLock.
...das Nein hat gefehlt.
Delphi-Quellcode:
for j := 0 to High(MainVerz) do
begin
ListBox1.Items.Add(MainVerz[j]);
// ListBox: niemals aus einem Thread auf das Control zugreifen. Nur mit Synchronize über ein Event!
try
Begin
// Einlesen der Dateien ab dem Verz[j]
SearchResult := TDirectory.GetFiles(MainVerz[j], FilterMaske, TSearchOption.soAllDirectories);
for I := 0 to High(SearchResult) do
begin
if SearchResult[I] <> '' then
begin
// grid.Cells[1, AktLine] := ExtractFilename(SearchResult[I]);
// grid.Cells[2, AktLine] := ExtractFilePath(SearchResult[I]);
qV.append;
qV.FieldByName('Verzeichnis').AsString := ExtractFilePath(SearchResult[I]);
qV.FieldByName('Datei').AsString := ExtractFileName(SearchResult[I]);
qV.FieldByName('Kategorie').AsString := '';
qV.Post;
inc(AktLine);
end;
end;
ListBox1.Items.Add('Task ' + IntToStr(j) + ' Zeit: ' + FormatDateTime('hh:nn:ss:zzz', Now - StartTime)); /
// ListBox: niemals aus einem Thread auf das Control zugreifen. Nur mit Synchronize über ein Event!
StartTime := Now();
ListBox1.Refresh;
End;
except
// Catch the possible exceptions
MessageDlg('Incorrect path or search mask', mtError, [mbOK], 0);
Exit;
end;
Form1.ProgressBar1.Position := j;
// Form: niemals aus einem Thread auf die Form zugreifen. Nur mit Synchronize über ein Event!
end;
LTaskRun := false;
end;
Jetzt rächt sich wieder einmal
RAD. Jede procedure kennt alle Units / Controls.