'da senkronizasyon gizemi Bu konsepti kavramak için uğraşıyordum ve birçok deneyden sonra bile WPF'deki ObservableCollections ile en iyi uygulamanın ne olduğunu ve BindingOperations.EnableCollectionSynchronization'ı kullanarak ne olduğunu anlayamıyorum.BindingOperations.EnableCollection WPF
Bir gözlemlenebilir koleksiyonu ile ViewModel sahip ve aşağıda gösterildiği gibi Benim kilidi kullanarak Üzerinde toplama senkronizasyonu etkinleştirirseniz:
m_obsverableCollection = new ObservableCollection<..>;
BindingOperations.EnableCollectionSynchronization(m_obsverableCollection,
m_obsverableCollectionLock);
anlamına mı geliyor gözlemlenebilir koleksiyonu üzerinde her modifikasyon ve numaralandırma eder:
- Koleksiyonu m_obsverableCollectionLock kullanarak otomatik olarak kilitleyin.
- Marshall, koleksiyonun oluşturulduğu iş parçasındaki tüm değişiklikleri mi?
- Marshall bağlama işlemlerinin yapıldığı iş parçacığındaki tüm değişiklikler yapıldı mı?
BindingOperations.EnableCollectionSynchronization kullanırken, hiç bir şekilde açıkça kilitleme yapmam gerekecek mi?
Tüm bunlar, BindingOperations.EnableCollectionSynchronization ve kilitleme öğelerini kullandıktan sonra bile bu yönteme geçtiğinde bile, bu arada, aldığım "Bu CollectionView türünün SourceCollection öğesindeki değişiklikleri desteklememesidir. Dispatcher dizisinden farklı bir konu. " istisna
Toplamayı nasıl düzenlediğinizi ve nereden aldığınızı yazabilir misiniz? Küçük uygulamada denedim ve mükemmel bir şekilde çalışıyor. –
Sorun aralıklıydı, bu nedenle yeniden üretmek için kod ekleyemedi. Sorun, BindingOperations.EnableSynchronization UI iş parçacığı aracılığıyla yapılması gerekiyordu, aksi halde koleksiyon UI olmayan iş parçacığı aracılığıyla erişilen bir özel durum olasılığını var oldu – Ruskin
Ana UI iş parçacığı üzerinde ObservableCollection veya arka plan iş parçacığı güncelleştiriliyor musunuz ? Bg iş parçacığından, bu güncelleştirmeyi "Application.Current.Dispatcher.BeginInvoke()') kullanarak yapıyor musunuz? Bu çağrıyı basit bir 'lock()' ifadesi (~ aklı) kullanarak ... denediniz mi? – code4life