Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it safe to use the SHFileOperation in a worker thread?

I would like to have

  • one background thread which will copy the files through the SHFileOperation function, always only one SHFileOperation at the time (but I want it to be in the thread)
  • I need the UI output, so I need to use the FOF_SIMPLEPROGRESS flag and pass something to the Wnd member

I have two questions

  1. is it safe to call the SHFileOperation with FOF_SIMPLEPROGRESS flag (for user interaction) from the thread other than main ?
  2. if yes, what handle should I pass into the Wnd member ? I've tried the handle of the main form, but when e.g. the overwrite confirmation dialog pops up and you confirm it, the main form is sent to the background, what is really strange

Note: I have a queue for these operations, so only one SHFileOperation is performed at the time (after it's finished, the thread continues to the other action, what might be the next SHFileOperation)

Thanks a lot

like image 698
Martin Reiner Avatar asked Feb 28 '12 14:02

Martin Reiner


1 Answers

  1. It's perfectly safe to call SHFileOperation from a thread other than the main thread.
  2. I would pass 0 as the hwnd member. If you pass the handle of the main window then I expect that window will be disabled because SHFileOperation is a modal dialog. Since the file confirmation and progress dialogs are the top level UI for the background thread, you don't want any windows to be disabled when these modal dialogs show.
like image 109
David Heffernan Avatar answered Oct 05 '22 01:10

David Heffernan