2012-02-28 11 views
7

chciałbym miećCzy można bezpiecznie używać funkcji SHFileOperation w wątku roboczym?

  • jeden tło wątek, który będzie skopiować pliki za pomocą funkcji SHFileOperation, zawsze tylko jeden SHFileOperation w czasie (ale chcę go mieć w wątku)
  • muszę wyjście UI, więc trzeba użyć flagi FOF_SIMPLEPROGRESS i przekazać coś członkowi Wnd

mam dwa pytania

  1. Czy można bezpiecznie wywoływać flagę SHFileOperation z FOF_SIMPLEPROGRESS (dla interakcji użytkownika) z wątku innego niż główny?
  2. jeśli tak, jaki uchwyt należy przekazać członkowi Wnd? Próbowałem obsługi głównego formularza, ale gdy np. okno dialogowe potwierdzenia nadpisania wyskakuje i potwierdzić, że główną formą jest wysyłany do tła, co jest naprawdę dziwne

Uwaga: Mam kolejki dla tych operacji, więc tylko jeden SHFileOperation odbywa się w czasie (po jego zakończeniu, nitka przechodzi do innych działań, co może być kolejnym SHFileOperation)

dzięki dużo

Odpowiedz

6
  1. jest to całkowicie bezpieczne zadzwonić SHFileOperation z wątku innego niż wątek główny.
  2. Przekazałbym 0 jako członka hwnd. Jeśli przejedziesz uchwytem głównego okna, spodziewam się, że to okno zostanie wyłączone, ponieważ SHFileOperation jest modalnym dialogiem. Ponieważ okna dialogowe potwierdzenia pliku i postępu są interfejsem najwyższego poziomu dla wątku tła, nie należy wyłączać żadnych okien, gdy te modalne okna dialogowe się wyświetlają.
+0

Wspaniale to słyszeć. Element 'Wnd' ustawiony na 0 działa idealnie. Wielkie dzięki! –

+0

Ponadto, dokumentacja wspomina również, że używanie względnych ścieżek z SHFILEOPSTRUCT NIE jest bezpieczne dla wątków. Więc jeśli używasz tego w wątku roboczym, musisz użyć bezwzględnych ścieżek! – 8bitwide

+0

@ 8bitwide Korzystanie ze ścieżek względnych nigdy nie jest bezpieczne. Nie dla żadnego połączenia API. A to dlatego, że istnieje jeden katalog roboczy na proces. –

Powiązane problemy