![]() |
Thread blockiert App bei SHFileOperation (keine Synchr)
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:
Die Execute sieht wie folgt aus:
constructor TFileCopyThread.Create(FileCopyInfo: TFileCopyInfo; DeviceInfo: TDeviceInfo);
begin inherited Create(True); FreeOnTerminate := True; Priority := tpLowest; CoInitializeEx(nil, COINIT_MULTITHREADED); FFileCopyInfo := FileCopyInfo; FDeviceInfo := DeviceInfo; end;
Delphi-Quellcode:
Da ich mich nur auf dem Dateisystem bewege habe ich an keiner Stelle ein Synchronize eingebaut.
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; 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 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 by Thomas Breitkreuz