Hi!
Nachdem ich jetzt schon alles mögliche ausprobiert habe, muss ich mich an's Forum wenden:
Ich habe einen Thread, der alle Bilder einer Diggi-Cam rekursiv kopiert. Er wird wie folgt erstellt:
Delphi-Quellcode:
constructor TFileCopyThread.Create(FileCopyInfo: TFileCopyInfo; DeviceInfo: TDeviceInfo);
begin
inherited Create(True);
FreeOnTerminate := True;
Priority := tpLowest;
CoInitializeEx(nil, COINIT_MULTITHREADED);
FFileCopyInfo := FileCopyInfo;
FDeviceInfo := DeviceInfo;
end;
Die Execute sieht wie folgt aus:
Delphi-Quellcode:
procedure TFileCopyThread.Execute;
begin
with FFileCopyInfo do
begin
if DestDir <> '' then
begin
if not ForceDirectories(DestDir) then
Exit; //ShowMessage...
end else
Exit;
if GetDevType(FDeviceInfo) = DTVolume then
FileOpOnAllFilesRecursive(FDeviceInfo.Vol, DestDir, Extensions, Levels, FO_COPY, Flags);
if GetDevType(FDeviceInfo) = DTCamera then
begin
RecursiveContextCopyPaste(GetIShellFolderFromPath(FullCameraPath), DestDir,
'copy', Extensions, 5);
end;
end;
end;
Da ich mich nur auf dem Dateisystem bewege habe ich an keiner Stelle ein Synchronize eingebaut.
Theoretisch müsste der Thread also unabhängig vom Hauptthread laufen.
Da ich nicht die WIA Schnittstelle meiner Canon-Kamera benutze erledige ich das Kopieren über das
IContextMenu. Das heißt in jedem Bilderordner auf der Kamera wird ein nicht sichtbares KontextMenu
aufgerufen und der Copy-Befehl benutzt. (Das musste ich so lösen, da Kameras mit WIA-Schnittstelle
nicht über die üblichen File-Befehle ansprechbar sind)
Beim eigenlichen Kopieren friert das Hauptfenster ein, obwohl es eigentlich keine Verbindung zu diesem
gibt. Wieso versagt der Thread derart?
Grüße
Sebastian