Безопасно ли использовать SHFileOperation в рабочем потоке? - PullRequest
7 голосов
/ 28 февраля 2012

Я хотел бы иметь

  • один фоновый поток, который будет копировать файлы с помощью функции SHFileOperation, всегда только один SHFileOperation за раз (но я хочу, чтобы он был в потоке)
  • Мне нужен вывод пользовательского интерфейса, поэтому мне нужно использовать флаг FOF_SIMPLEPROGRESS и передать что-то члену Wnd

У меня два вопроса

  1. безопасно ли вызывать флаг SHFileOperation с FOF_SIMPLEPROGRESS (для взаимодействия с пользователем) из потока, отличного от основного?
  2. если да, то какой дескриптор я должен передать элементу Wnd? Я попробовал ручку основной формы, но когда, например, появляется диалоговое окно подтверждения перезаписи, и вы подтверждаете его, основная форма отправляется на задний план, что действительно странно

Примечание: У меня есть очередь для этих операций, поэтому в один момент времени выполняется только один SHFileOperation (после его завершения поток переходит к другому действию, что может быть следующим SHFileOperation)

Большое спасибо

1 Ответ

6 голосов
/ 28 февраля 2012
  1. Совершенно безопасно вызывать SHFileOperation из потока, отличного от основного потока.
  2. Я бы передал 0 как член hwnd. Если вы передадите дескриптор главного окна, то я ожидаю, что это окно будет отключено, потому что SHFileOperation - модальное диалоговое окно. Поскольку диалоги подтверждения файла и хода выполнения являются интерфейсом верхнего уровня для фонового потока, вы не хотите, чтобы какие-либо окна были отключены, когда эти модальные диалоговые окна отображаются.
...