2012-02-28 18 views
7

me gustaría tener¿Es seguro usar SHFileOperation en un hilo de trabajo?

  • un fondo de hilo que copiará los archivos a través de la función SHFileOperation, siempre uno sólo SHFileOperation en el momento (pero yo quiero que sea en el hilo)
  • necesito el salida de la interfaz de usuario, por lo que es necesario utilizar la bandera FOF_SIMPLEPROGRESS y pasar algo al miembro Wnd

tengo dos preguntas

  1. ¿es seguro llamar al SHFileOperation con el indicador FOF_SIMPLEPROGRESS (para la interacción del usuario) del hilo que no sea principal?
  2. en caso afirmativo, ¿qué identificador debo pasar al miembro Wnd? He intentado con el manejo del formulario principal, pero cuando p. el cuadro de diálogo de confirmación de sobrescritura aparece y se confirme, la forma principal se envía a un segundo plano, lo que es realmente extraño

Nota: que tienen una cola para estas operaciones, por lo que sólo una SHFileOperation se realiza en el momento (después de que haya terminado, el hilo sigue la otra acción, lo que podría ser el próximo SHFileOperation)

muchas gracias

Respuesta

6
  1. es perfectamente seguro para llamar SHFileOperation de un hilo que no sea el hilo principal.
  2. Pasaría 0 como el miembro hwnd. Si pasa el control de la ventana principal, entonces espero que esa ventana se deshabilite porque SHFileOperation es un cuadro de diálogo modal. Como los diálogos de confirmación y progreso del archivo son la interfaz de usuario de nivel superior para el hilo de fondo, no quiere que se desactive ninguna ventana cuando se muestran estos cuadros de diálogo modales.
+0

Genial para escuchar esto. El miembro 'Wnd' establecido en 0 funciona perfectamente. ¡Muchas gracias! –

+0

Además, la documentación también menciona que el uso de rutas relativas con SHFILEOPSTRUCT NO es seguro para subprocesos. Entonces, si estás usando esto en un hilo de trabajo, debes usar rutas absolutas. – 8bitwide

+0

@ 8bitwide El uso de rutas relativas nunca es seguro para subprocesos. No para ninguna llamada API. Eso es porque hay un directorio de trabajo por proceso. –

Cuestiones relacionadas