Bien digamos que tengo un objeto que me databind, se implementa INotifyPropertyChanged de decirle a la interfaz gráfica de usuario cuando un valor ha cambiado…

si puedo activar desde un subproceso diferente a la interfaz gráfica de usuario hilo ¿cómo wpf se comportan?

y va a asegurarse de que obtiene el valor de la propiedad de la memoria y no la caché de cpu?

más o menos im preguntando si wpf hace lock() en el objeto que contiene la propiedad…

InformationsquelleAutor Peter | 2010-03-31

3 Comentarios

  1. 41

    Los cambios en el valor despedido por INotifyPropertyChanged son automáticamente calcula de nuevo en el distribuidor. (http://blog.lab49.com/archives/1166)

    Fuego este evento en el hilo que te gusta…


    Los cambios en el valor despedido por INotifyCollectionChanged NO de forma fiable calcularse en el distribuidor. (http://csharplive.wordpress.com/2008/09/11/wpf-data-binding-observablecollection-cross-thread-binding-support/)

    Si necesita actualizar una colección observable desde un subproceso diferente, siga los consejos de este enlace

    • +1 ¡Ja! Aprender una cosa nueva cada día. Acabo de hacer una prueba rápida para confirmar esto….Estoy seguro de que me había marshall valores para el subproceso de interfaz de usuario cuando se trabaja con wpf…tal vez yo sólo voy senil…
    • Sin duda tienes a la jefa de llamadas en contra de un control real (textBox.Text="Foo"), pero el enlace de datos marco ayuda un poco.
    • Lo que si puedo escribir un valor a la variable privada de la propiedad de los usos y, a continuación, dispare el evento, el «GUI» hilo va sobre para leer el valor, pero tiene un valor antiguo almacena en caché el Caché de CPU… ¿hay alguna handeling de este que se asegura de que el valor no es viejo o en la memoria caché?…
    • Incluso si .Neta no encargamos de eso, el Enlace de datos ocurre equipo-AÑOS después de todos los otros hilos han terminado de calcular las cosas. Usted va a estar bien…
    • Que colección observable uno ha mordido a mí muchas veces. lo que es un dolor.
    • Pruebe el siguiente enlace que proporciona un hilo de seguridad solución que funciona desde cualquier hilo y se pueden enlazar a través de múltiples subprocesos de interfaz de usuario : codeproject.com/Articles/64936/…
    • No es tan cierto para WPF4.5: msdn.microsoft.com/en-us/library/…
    • csharplive.wordpress.com es hacia abajo, ¿cuál fue el consejo que le siga ?
    • href=»https://web.archive.org/web/20140606045433/http://csharplive.wordpress.com/2008/09/11/wpf-data-binding-observablecollection-cross-thread-binding-support/» >web.archive.org 2

  2. 3

    Además a @Rob Fonseca-Ensor de la respuesta, hay algunas buenas noticias para aquellos lo suficientemente afortunados para uso WPF4.5:

    WPF permite acceder y modificar datos de colecciones en otros hilos que la creación de la colección. Esto permite utilizar un subproceso en segundo plano para recibir los datos desde una fuente externa, tal como una base de datos y mostrar los datos en el subproceso de interfaz de usuario. Mediante el uso de otro hilo para modificar la colección, la interfaz de usuario sigue siendo sensible a la interacción con el usuario. (https://msdn.microsoft.com/en-us/library/bb613588(v=vs 110).aspx#xthread_access)

    Hay un útil resumen por Jonathan Antoine: http://www.jonathanantoine.com/2011/09/24/wpf-4-5-part-7-accessing-collections-on-non-ui-threads/

  3. 0

    En la práctica, parece que funciona como se esperaba y parece ser seguro para subprocesos (no he visto nada extraño sucede o excepciones como resultado de la actualización en el subproceso en segundo plano). Creo que se invoca en el subproceso de interfaz de usuario cuando sea necesario, pero no estoy muy familiarizado con el funcionamiento interno.

Dejar respuesta

Please enter your comment!
Please enter your name here