¿Qué partes de la comunicación con TWAIN se pueden poner en otra conversación, p. Ej. un BackgroundWorker? O: ¿Es posible dividir el bucle que maneja la transferencia de imágenes?¿Cómo puedo escanear y transferir imágenes desde un alimentador de documentos de forma asíncrona?
Algunos controladores de escáner escanean todas las imágenes antes de volver a la aplicación de llamada, lo que obliga a la aplicación a manejar todas las imágenes a la vez. Esto da como resultado, p. OutOfMemoryException o comportamiento extraño en mi aplicación WPF cuando de repente todos los eventos (surgidos después de cada imagen escaneada) tienen que ser manejados a la vez. Además, la aplicación se cuelga hasta que se completa la transferencia.
Estoy usando TwainDotNet: http://code.google.com/p/twaindotnet/ pero también estoy buscando una solución genérica que describa el filtro de mensajes y la interacción con TWAIN independiente de TwainDotNet. Un flujo de trabajo que contenga los mensajes TWAIN sería suficiente. Otros idiomas también son bienvenidos, preferible algo como C o Deplhi.
La implementación actual del filtro de mensajes en DataSourceManager se puede describir de la siguiente manera: mensajes de información
- obtener de identificador de ventana (hwnd)
- filtro complican, enviar cosas para TWAIN etc.
- si mensaje de cierre (por ejemplo, al pulsar el botón de cancelar en el TWAIN UI)
- fuente cercana datos
- filtro Disable
- Call caso ScanningComplete
- si la transferencia de mensajes listo:
- En un bucle (hasta que el ADF está vacío, etc., esto bloquea el filtro de mensajes)
-
- obtener una imagen
-
- Convertir puntero a imagen GDI +
-
- Call caso TransferImage con la imagen como parámetro
- transferencia de reinicio
- Cerrar fuente de datos, etc. (igual que el mensaje de cierre)
- notifica Windows, que el mensaje tiene sido manejado
He probado esto con sever al escáner:
- Un Fujitsu fi-5120C llama al evento TransferImage cada vez que se transfiere una página. La imagen aparece de inmediato en una lista de imágenes en mi aplicación WPF.
- Una Canon DR-5010C bloquea mi aplicación WPF hasta que todas las imágenes se hayan escaneado (hasta que termine el ciclo). Windows incluso dice que la aplicación WPF no responde.Después de todas las imágenes han sido transferidos, sólo unos pocos se muestran las imágenes y la selección en la lista de imagen parpadea etc ..
No estoy preocupado por los problemas de la pantalla, sino más bien de la ventana bloqueado y los problemas de memoria. Poner el bucle que transfiere las imágenes en un BackgroundWorker causó varios bloqueos, que no pude depurar. Por lo que consideré los problemas de enhebrado de WPF. Tampoco sé cómo dividir el bucle de transferencia, de modo que, después de transferir una imagen, el programa vuelve al filtro de mensajes y el mensaje se puede marcar como manejado.
¿Has pensado en preguntarle al grupo de desarrolladores de TwaindotNet? [Http://groups.google.com/group/twaindotnet-devs?pli=1](http://groups.google.com/group/twaindotnet-devs?pli=1) – ascarb
Busco un genérico solución que describe el filtro de mensajes y la interacción con TWAIN independiente de TwainDotNet. Un flujo de trabajo que contenga los mensajes TWAIN sería suficiente. Otros idiomas también son bienvenidos, preferible algo como C o Deplhi. –