He estado trabajando en el mismo proyecto ahora desde Navidad de 2008. Me han pedido que lo tome de una aplicación de consola (que simplemente imprime declaraciones de seguimiento), a un completo Aplicación de Windows. Claro, está bien. Lo único es que hay partes de la aplicación que pueden tardar de varios minutos a casi una hora en ejecutarse. Necesito multiprocesarlo para mostrar el estado del usuario o los errores. Pero no tengo idea de por dónde empezar.Multithreading: cómo actualizar la interfaz de usuario para indicar el progreso
He desarrollado una pequeña interfaz de usuario en WPF. Es muy básico, pero me gustaría expandirlo según sea necesario. La aplicación funciona seleccionando una fuente, eligiendo un destino y haciendo clic en iniciar. Me gustaría que se actualice un listbox a medida que avanza el proceso. De la misma manera que SQL Server se instala, cada paso tiene una marca de verificación verde por su nombre a medida que se completa.
¿Cómo comienza un principiante el subprocesamiento múltiple? ¿Qué bibliotecas debería consultar? Cualquier consejo sería muy apreciado.
p.s. Actualmente estoy leyendo acerca de esta biblioteca, http://www.codeplex.com/smartthreadpool
@ Martin: Aquí está cómo se construye mi aplicación:
- motor: Se ejecuta todos los componentes principales en orden predefinido
- Excel: Biblioteca escribí para envolver COM para abrir/leer/cierre/guardar libros
- Biblioteca: Biblioteca, que comprende diferentes tipos de formatos de libro (5 en total)
- Clases de actividad: Las clases que he escrito para traducir los datos de Excel y prepararlo para el Acceso
- Biblioteca DB: Una biblioteca que he escrito que utiliza ADO.NET para leer los datos de acceso
- AppSettings: se entiende la idea
- Serialier: Guardar los datos en caso de accidente aplicación
I utilice todo desde LINQ hasta ADO.NET para obtener datos, transformarlos y luego generarlos.
Mi principal requisito es que quiero actualizar mi interfaz de usuario para indicar el progreso
@Frank: ¿Qué pasa si algo en el fondo Trabajador produce una excepción (manejado o no)? ¿Cómo recibe mi solicitud un aviso?
@Eric Lippert: Sí, estoy investigando eso ahora mismo. Antes de complicar las cosas.
Avíseme si necesita más información. Actualmente estoy ejecutando esta aplicación desde una prueba de unidad, así que supongo que llamar a una aplicación de consola no es verdad. Yo uso Resharper para hacer esto. Soy la única persona en este momento que usa la aplicación, pero me gustaría tener una interfaz más atractiva
Antes de ir, agregue un montón de complejidad de subprocesos múltiples, puede considerar cómo escribiría su aplicación para que responda al usuario sin dejar de ser un solo subproceso. Es razonable cambiar los algoritmos para que puedan hacer un poco de cálculo, devolver el hecho de que progresaron, dejar que la UI se actualice y luego reanudar el cálculo donde lo dejaron. –
Si se trata de una API de base de datos que va a ser muy difícil.Los usuarios tendrán redes lentas, fallas de red, tiempos de espera de búsqueda de nombres. El DB estará ocupado a veces, etc. El manejo de la E/S de red sin procesar es posible en un modo no bloqueante/asíncrono. Pero pasar por ADO.NET, no es realmente una opción viable. – nos
@noselasd: Solo estoy usando ADO.NET por un tiempo, no lo estoy usando como mi back-end store. – Chris