"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 > ¿Cómo modificar una colección observable de un hilo que no pertenece al distribuidor en WPF?

¿Cómo modificar una colección observable de un hilo que no pertenece al distribuidor en WPF?

Publicado el 2024-11-08
Navegar:933

How to Modify an ObservableCollection From a Non-Dispatcher Thread in WPF?

"Este tipo de CollectionView no admite cambios en su colección de origen desde un hilo diferente al hilo de Dispatcher"

Descripción del problema

Un enlace de DataGrid a una ObservableCollection completa de forma asincrónica genera un error que indica que no se permiten cambios en SourceCollection desde un subproceso que no sea Dispatcher.

Solución

El problema surge de la afinidad del subproceso. ObservableCollection se crea inicialmente en el hilo de la interfaz de usuario, por lo que solo se puede acceder a ella desde el hilo de la interfaz de usuario. Para modificarlo desde un hilo diferente, el delegado debe colocarse en UI Dispatcher.

Código de ViewModel actualizado

public void Load()
{
    matchList = new List();
    matchList = proxy.GetMatch().ToList();

    foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
    {
        App.Current.Dispatcher.Invoke((Action)delegate
        {
            _matchObsCollection.Add(match);
        });
    }
}

Al invocar al delegado en UI Dispatcher, las adiciones a ObservableCollection se programan en el subproceso de UI, resolviendo la excepción.

Enlace y actualización mejorados

Para asincrónicos vinculación y actualización de DataGrid, considere usar INotifyPropertyChanged en sus propiedades de ViewModel e invocar Dispatcher para actualizar los elementos de la interfaz de usuario.

Ú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