"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué aparece "Este tipo de CollectionView no admite cambios en su SourceCollection desde un hilo diferente del hilo de Dispatcher"?

¿Por qué aparece "Este tipo de CollectionView no admite cambios en su SourceCollection desde un hilo diferente del hilo de Dispatcher"?

Publicado el 2024-11-04
Navegar:317

Why Am I Getting \

Manejo de errores: "Este tipo de CollectionView no admite cambios en su SourceCollection desde un hilo diferente del hilo de Dispatcher"

El mensaje de error proporcionado, "Este tipo of CollectionView no admite cambios en su SourceCollection desde un subproceso diferente del subproceso Dispatcher", indica un intento de modificar una ObservableCollection desde un subproceso que no es UI.

Como se explica en el código proporcionado, el Load( ) rellena la _matchObsCollection ObservableCollection a partir de una lista de objetos GetMatchDetailsDC. Sin embargo, esta actualización se realiza fuera del hilo de la interfaz de usuario.

Thread Affinity y Dispatcher

En WPF, los elementos de la interfaz de usuario, como DataGrid, se crean en el hilo de la interfaz de usuario y mantienen un afinidad del hilo. Cualquier modificación a estos elementos se debe realizar desde el hilo de la interfaz de usuario para garantizar la seguridad del hilo.

Resolviendo el error

Para resolver este problema, puede usar App.Current.Dispatcher.Invoke(( Acción)delegar {... }) método para invocar la actualización de la colección en el hilo de la interfaz de usuario:

matchList = proxy.GetMatch().ToList();

foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
{
    App.Current.Dispatcher.Invoke((Action)delegate  // 

Carga de datos asincrónica en WPF

Si bien el uso de métodos asincrónicos para la carga de datos es común, es importante considerar la seguridad de los subprocesos al manipular elementos de la interfaz de usuario desde subprocesos que no son de la interfaz de usuario. Asegúrese siempre de que cualquier actualización de los elementos de la interfaz de usuario, como la modificación de una ObservableCollection, se realice en el subproceso de la interfaz de usuario para evitar errores relacionados con los subprocesos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3