Estoy intentando arrastrar un elemento al explorador.
El elemento debería dar como resultado una descarga de archivos, así que he usado un ejemplo que encontré en la web para descargar el archivo usando un CustomDataObject
que llama a un evento cuando realmente necesita la transmisión, y luego mi aplicación hace el pesado levantando y realiza la descarga.
Ha funcionado bien en una operación similar de Portapapeles.arrastre a otro proceso
La descarga del archivo real también causa algunos cambios de la interfaz de usuario en mi aplicación. En su mayoría, un icono de "trabajo" cambia en el formulario y también un globo emergente en caso de error.
En la operación del portapapeles acabo de utilizar InvokeRequired
y BeginInvoke
cuando sea necesario, para asegurarme de que los cambios de la interfaz de usuario ocurran en el hilo principal. En la operación de arrastre, el hilo de la interfaz de usuario está esperando el retorno del DoDragDrop
, mientras que el evento que se genera con el CustomDataObject
está siendo llamado en un hilo diferente. Cuando trato de llamar al BeginInvoke
o al Invoke
, el hilo de la interfaz de usuario todavía está esperando y no puedo terminar la caída.
¿Hay alguna muestra, o una mejor práctica recomendada, sobre cómo permitir el arrastre y la extracción entre aplicaciones, mientras se accede a la interfaz de usuario de la aplicación de origen?
ACTUALIZACIÓN
here es el artículo original con el CodeProject DataObjectEx
he modificado para mi propio uso. Acabo de cambiar el método GetFileContents
para llamar a un método virtual que devuelve un Stream
que contiene los datos del archivo, heredados de la clase, y anula ese método virtual para obtener el archivo de la web. El problema surgió cuando quería cambiar cosas en la interfaz de usuario, mientras obtenía el archivo. Como dije antes, el hilo principal de UI todavía está "atascado" en la llamada al método DoDragDrop
, por lo que no puedo invocarlo a tiempo para realizar los cambios de UI necesarios para el hilo del trabajador antes y después de descargar el archivo.
Dudo que obtenga una respuesta útil hasta que describa qué tipo de animal es un "CustomDataObject" y cómo se las arregla para ejecutar el código en su aplicación. –
Buscaré y encontraré el ejemplo de código que utilicé en la red –