Tengo un objeto ListBox en mi hilo principal (aplicación WPF). ¿Por qué no puedo acceder a él en el hilo de BackgroundWorker? Hasta donde yo sé, la pila está separada para cada hilo, pero el montón es común. No es objeto ListBox creado en heap. En ese caso, ¿por qué no es accesible? Intenté pasar el parámetro de referencia ListBox como parámetro e intenté acceder a sus contenidos en BackgroundWorker. ¿El concepto de compartir objetos entre hilos es diferente de C++?Compartir objetos entre un BackgroundWorker y el hilo principal
Respuesta
Al igual que WinForms, el diseño de WPF se simplifica enormemente por el requisito de que se acceda a todos los elementos de la interfaz de usuario solo desde los hilos que los crearon.
Cuando intenta escribir un programa de subprocesos múltiples, esta "característica" puede parecer una gran limitación. Es imposible modificar incluso las propiedades más simples de un elemento de interfaz de usuario directamente desde una cadena de fondo. Si es así, ¿cómo podemos usar hilos de fondo con WPF?
La respuesta es que debemos transformar nuestras acciones destinadas a la interfaz de usuario en la línea de fondo donde el trabajo se puede realizar sin conflicto. Más estrictamente hablando, debemos hacer que nuestras acciones se ejecuten en el contexto del hilo que creó el elemento que estamos tratando de modificar.
El tema de la rosca en WPF es uno grande, pero aquí es un excelente artículo de introducción:
Si usted lee este artículo que ver cómo utilizar el Dispatcher
para lograr su acciones sin violar el modelo de subprocesamiento.
- 1. Compartir un objeto entre dos hilos y el programa principal
- 2. AudioServicesPlaySystemSound y el hilo principal
- 3. NSPrivateQueueConcurrencyType de Datos Básicos y compartir objetos entre hilos
- 4. Diferencia entre BackgroundWorker y Thread?
- 5. ¿Es posible matar el hilo de BackgroundWorker?
- 6. Compartir objetos DTO entre servicios de WCF
- 7. ¿Cómo compartir objetos entre aplicaciones java?
- 8. NSOperation y NSNotificationCenter en el hilo principal
- 9. Pase grandes cantidades de datos entre el trabajador web y el hilo principal
- 10. ¿Qué hilo ejecuta backgroundworker en el controlador de eventos ejecutado?
- 11. ¿Compartir el conjunto de datos entre el informe principal y los subinformes en Crystal Reports 2008?
- 12. NSURLConnection bloquea el hilo principal?
- 13. Diferencia entre el hilo # ejecutar y el hilo # despertar?
- 14. Compartir un objeto entre actividades
- 15. NSTask bloqueando el hilo principal
- 16. iPhone: ¿Cómo determinar si el hilo es el hilo principal?
- 17. .NET Backgroundworker: ¿no hay forma de que las excepciones vuelvan normalmente al hilo principal?
- 18. Compartir objetos y evitar globales en node.js
- 19. Compruebe si el hilo actual es el hilo principal
- 20. Patrón para compartir datos entre objetos en C++
- 21. ¿Diferencia entre una "coroutine" y un "hilo"?
- 22. ¿Es posible compartir un objeto opengl framebuffer entre contextos/hilos?
- 23. ¿Debería invocarse URLForUbiquityContainerIdentifier en un hilo fuera del hilo principal?
- 24. ¿Hay alguna forma de compartir objetos entre páginas de php?
- 25. llamando al hilo principal desde el hilo Runnable en java
- 26. Código de ejecución en el hilo principal de otro hilo
- 27. terminando un hilo secundario del hilo principal (cacao)
- 28. 'java.lang.NoSuchMethodError: Excepción principal de hilo 'principal''
- 29. Método de ejecución en el hilo principal de otro hilo
- 30. actualización ListView en el hilo principal desde otro hilo
¿Puedes mostrar algún fragmento de código? – crypted
Puede pasarlo como cualquier otro objeto pero tan pronto como lo cambie se generará una excepción ya que el modelo de subprocesamiento es 'STA'. Puede encontrar cómo cambiarlo de manera segura desde diferentes subprocesos en 'stackoverflow'. – Xaqron