BindingOperations.EnableCollectionSynchronization Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir CollectionView nesnenin birden çok iş parçacığında kullanılan bir koleksiyona eşitlenmiş erişime katılmasını sağlar.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| EnableCollectionSynchronization(IEnumerable, Object) |
Bir CollectionView nesnenin basit bir kilitleme mekanizması kullanarak birden çok iş parçacığında kullanılan bir koleksiyona eşitlenmiş erişime katılmasını sağlar. |
| EnableCollectionSynchronization(IEnumerable, Object, CollectionSynchronizationCallback) |
Bir CollectionView nesnenin basit bir kilit dışında bir mekanizma kullanarak birden çok iş parçacığında kullanılan bir koleksiyona eşitlenmiş erişime katılmasını sağlar. |
Açıklamalar
WPF bir uygulama, ItemsControl veya alt sınıflarından birini (ListBox, DataGrid, TreeView, ListView vb.) kullanarak veri koleksiyonunu görüntüleyebilir. WPF, koleksiyona tüm erişimini CollectionView alt sınıfı aracılığıyla kanal oluşturur. ItemsControl hem hem de öğesinin CollectionView oluşturulduğu iş parçacığına benzine sahip olması, bunların farklı bir iş parçacığında ItemsControl kullanılmasının yasak olduğu ve bir özel durum oluşturduğu anlamına gelir. Aslında bu kısıtlama koleksiyon için de geçerlidir.
Koleksiyonu birden çok iş parçacığında kullanmak isteyebilirsiniz. Örneğin, bir "veri toplama" iş parçacığında koleksiyonu güncelleştirmek (öğeleri eklemek veya kaldırmak) ve sonuçları bir "kullanıcı arabirimi" iş parçacığında görüntülerken, kullanıcı arabiriminin veri toplama işlemi sırasında yanıt vermeye devam edebilmesini sağlamak istiyorsunuz. Böyle bir durumda, koleksiyona eşitlenmiş ("iş parçacığı güvenli") erişimi sağlamak sizin sorumluluğundadır. Bu genellikle basit bir kilit mekanizması veya semaforlar, sıfırlama olayları vb. gibi daha ayrıntılı bir eşitleme mekanizması kullanılarak yapılır.
Uygulamanızın koleksiyona erişimini eşitlemeniz gerekir ancak WPF erişimin (özellikle CollectionView) aynı eşitleme mekanizmasına katıldığını da garanti etmeniz gerekir. Yöntemini çağırarak EnableCollectionSynchronization bunu yaparsınız.
Bir koleksiyonu birden çok iş parçacığında kullanmak için( bunlardan biri, öğesinin sahibi olan ui iş parçacığıdır) ItemsControlbir uygulamanın aşağıdaki sorumlulukları vardır:
Bir eşitleme mekanizması seçin.
Bu mekanizmayı kullanarak uygulamadan koleksiyona tüm erişimi eşitleyin.
WPF mekanizma hakkında bilgilendirmek için EnableCollectionSynchronization'yi çağırın.
Çağrı ui iş parçacığında gerçekleşmelidir.
Çağrı, koleksiyonu farklı bir iş parçacığında kullanmadan önce veya daha sonra olan koleksiyonuna ItemsControleklemeden önce gerçekleşmelidir.
EnableCollectionSynchronization(IEnumerable, Object) Basit bir kilit mekanizması kullanıyorsanız aşırı yüklemeyi çağırınEnableCollectionSynchronization(IEnumerable, Object, CollectionSynchronizationCallback); daha ayrıntılı bir mekanizma kullanıyorsanız aşırı yüklemeyi çağırın.
Koleksiyonda yapılan bir değişikliğin ve bu değişikliğin bildiriminin (aracılığıyla INotifyCollectionChanged) atomik olduğundan emin olun; diğer iş parçacıklarından hiçbir erişim müdahalede bulunmaz. (Bu genellikle ücretsizdir. Örneğin, ObservableCollection<T> tüm değişikliklerin eşitleme tarafından korunması koşuluyla bunu garanti eder.)
çağrısı DisableCollectionSynchronizationyaparsanız, bu çağrı ui iş parçacığında da gerçekleşmelidir.
Aynı koleksiyonu birden çok kullanıcı arabirimi iş parçacığında kullanmak istiyorsanız, her ui iş parçacığında ayrı ayrı çağırmanız EnableCollectionSynchronization (ve DisableCollectionSynchronizationgerekirse) gerekir.
Kilitlenmekten kaçının. Bu, eşitlemeyi kullanmayı seçtikten sonra zaten uygulamanın sorumluluğundadır, ancak aşağıdaki paragrafta açıklandığı gibi WPF eşitlemeye katılımını da hesaba katmalıdır.
Buna karşılık, WPF aşağıdaki davranışı sağlar:
verilen CollectionView eşitleme mekanizmasını kullanarak koleksiyona erişir.
, CollectionView kullanıcı arabirimi iş parçacığında kullanılmak üzere koleksiyonun "gölge kopyasını" tutar.
CollectionChanged olaylar geldikçe kuyruğa alınır (herhangi bir iş parçacığında).
Bekleyen olaylar, bunu yapma fırsatı olduğunda kullanıcı arabirimi iş parçacığında zaman uyumsuz olarak gölge kopyaya uygulanır.
CollectionView doğrudan uygulama tarafından görülebilen başka bir eşitleme mekanizması kullanmaz. Bu WPF kilitlenmeyi önlemeye yardımcı olma yöntemidir (önceki 7. öğeye bakın).
Bunun net etkisi, herhangi bir iş parçacığındaki koleksiyonu değiştirebilmenizdir ve bu değişiklikler sonunda kullanıcı arabirimi iş parçacığının ItemsControl "yakalama" zamanı olduğunda görünür. Uygulama, arka plan iş parçacıklarının ui iş parçacığını doygunluğunu ve normal kullanıcı girişine yanıt vermemeye karşı koruma sağlamak için ui iş parçacığına akışı değiştiren hızı azaltacak şekilde ayarlanmıştır.
EnableCollectionSynchronization(IEnumerable, Object)
Bir CollectionView nesnenin basit bir kilitleme mekanizması kullanarak birden çok iş parçacığında kullanılan bir koleksiyona eşitlenmiş erişime katılmasını sağlar.
public:
static void EnableCollectionSynchronization(System::Collections::IEnumerable ^ collection, System::Object ^ lockObject);
public static void EnableCollectionSynchronization(System.Collections.IEnumerable collection, object lockObject);
static member EnableCollectionSynchronization : System.Collections.IEnumerable * obj -> unit
Public Shared Sub EnableCollectionSynchronization (collection As IEnumerable, lockObject As Object)
Parametreler
- collection
- IEnumerable
Eşitlenmiş erişim gerektiren koleksiyon.
- lockObject
- Object
Koleksiyona erişirken kilitlenmek üzere nesne.
Açıklamalar
WPF bir uygulama, ItemsControl veya alt sınıflarından birini (ListBox, DataGrid, TreeView, ListView vb.) kullanarak veri koleksiyonunu görüntüleyebilir. WPF, koleksiyona tüm erişimini CollectionView alt sınıfı aracılığıyla kanal oluşturur. ItemsControl hem hem de öğesinin CollectionView oluşturulduğu iş parçacığına benzine sahip olması, bunların farklı bir iş parçacığında ItemsControl kullanılmasının yasak olduğu ve bir özel durum oluşturduğu anlamına gelir. Aslında bu kısıtlama koleksiyon için de geçerlidir.
Koleksiyonu birden çok iş parçacığında kullanmak isteyebilirsiniz. Örneğin, bir "veri toplama" iş parçacığında koleksiyonu güncelleştirmek (öğeleri eklemek veya kaldırmak) ve sonuçları bir "kullanıcı arabirimi" iş parçacığında görüntülerken, kullanıcı arabiriminin veri toplama işlemi sırasında yanıt vermeye devam edebilmesini sağlamak istiyorsunuz. Böyle bir durumda, koleksiyona eşitlenmiş ("iş parçacığı güvenli") erişimi sağlamaktan ve WPF erişimin (özellikle CollectionView) aynı eşitleme mekanizmasına katılmasını garanti etmek sizin sorumluluğundadır. yöntemini çağırarak EnableCollectionSynchronization(IEnumerable, Object) , basit bir kilit mekanizması kullanarak bunu yapabilirsiniz.
Bir koleksiyonu birden çok iş parçacığında kullanmak için, bunlardan biri de öğesinin sahibi ItemsContrololan ui iş parçacığıdır:
Koleksiyona erişirken kilitlenmek üzere bir nesne örneği oluşturun.
Bu nesneyi kilitleyerek uygulamadan koleksiyona tüm erişimi eşitleyin.
WPF basit bir kilit mekanizması kullandığınızı bildirmek için EnableCollectionSynchronization(IEnumerable, Object) çağrısında bulunur.
Çağrı ui iş parçacığında gerçekleşmelidir.
Çağrı, koleksiyonu farklı bir iş parçacığında kullanmadan önce veya daha sonra olan koleksiyonuna ItemsControleklemeden önce gerçekleşmelidir.
Koleksiyonda yapılan bir değişikliğin ve bu değişikliğin bildiriminin (aracılığıyla INotifyCollectionChanged) atomik olduğundan emin olun; diğer iş parçacıklarından hiçbir erişim müdahalede bulunmaz. (Bu genellikle ücretsizdir. Örneğin, ObservableCollection<T> tüm değişikliklerin eşitleme tarafından korunması koşuluyla bunu garanti eder.)
çağrısı DisableCollectionSynchronizationyaparsanız, bu çağrı ui iş parçacığında da gerçekleşmelidir.
Aynı koleksiyonu birden çok kullanıcı arabirimi iş parçacığında kullanmak istiyorsanız, her ui iş parçacığında ayrı ayrı çağırmanız EnableCollectionSynchronization (ve DisableCollectionSynchronizationgerekirse) gerekir.
Kilitlenmekten kaçının. Eşitlemeyi kullanmayı seçtikten sonra bu zaten uygulamanın sorumluluğundadır, ancak WPF eşitlemeye katılımını da hesaba katmalıdır. (Daha fazla bilgi için aşağıya bakın.)
Buna karşılık, WPF aşağıdaki davranışı sağlar:
, CollectionView kilitleme mekanizmasını kullanarak koleksiyona erişir.
, CollectionView kullanıcı arabirimi iş parçacığında kullanılmak üzere koleksiyonun "gölge kopyasını" tutar.
CollectionChanged olaylar geldikçe kuyruğa alınır (herhangi bir iş parçacığında).
Bekleyen olaylar, bunu yapma fırsatı olduğunda kullanıcı arabirimi iş parçacığında zaman uyumsuz olarak gölge kopyaya uygulanır.
doğrudan CollectionView uygulama tarafından görülebilen başka bir eşitleme mekanizması kullanmaz. Bu WPF kilitlenmeyi önlemeye yardımcı olma yöntemidir (önceki 7. öğeye bakın).
Bunun net etkisi, herhangi bir iş parçacığındaki koleksiyonu değiştirebilmenizdir ve bu değişiklikler sonunda kullanıcı arabirimi iş parçacığının ItemsControl "yakalama" zamanı olduğunda görünür. Uygulama, arka plan iş parçacıklarının ui iş parçacığını doygunluğunu ve normal kullanıcı girişine yanıt vermemeye karşı koruma sağlamak için ui iş parçacığına akışı değiştiren hızı azaltacak şekilde ayarlanmıştır.
Şunlara uygulanır
EnableCollectionSynchronization(IEnumerable, Object, CollectionSynchronizationCallback)
Bir CollectionView nesnenin basit bir kilit dışında bir mekanizma kullanarak birden çok iş parçacığında kullanılan bir koleksiyona eşitlenmiş erişime katılmasını sağlar.
public:
static void EnableCollectionSynchronization(System::Collections::IEnumerable ^ collection, System::Object ^ context, System::Windows::Data::CollectionSynchronizationCallback ^ synchronizationCallback);
public static void EnableCollectionSynchronization(System.Collections.IEnumerable collection, object context, System.Windows.Data.CollectionSynchronizationCallback synchronizationCallback);
static member EnableCollectionSynchronization : System.Collections.IEnumerable * obj * System.Windows.Data.CollectionSynchronizationCallback -> unit
Public Shared Sub EnableCollectionSynchronization (collection As IEnumerable, context As Object, synchronizationCallback As CollectionSynchronizationCallback)
Parametreler
- collection
- IEnumerable
Eşitlenmiş erişim gerektiren koleksiyon.
- context
- Object
Geri çağırmaya geçirilen bir nesne.
- synchronizationCallback
- CollectionSynchronizationCallback
Koleksiyona erişim gerektiğinde çağrılan geri çağırma. Koleksiyona bir kerede bir iş parçacığı tarafından erişildiğinden emin olmak için bunu kullanabilirsiniz.
Açıklamalar
WPF bir uygulama, ItemsControl veya alt sınıflarından birini (ListBox, DataGrid, TreeView, ListView vb.) kullanarak veri koleksiyonunu görüntüleyebilir. WPF, koleksiyona tüm erişimini CollectionView alt sınıfı aracılığıyla kanal oluşturur. ItemsControl hem hem de öğesinin CollectionView oluşturulduğu iş parçacığına benzine sahip olması, bunların farklı bir iş parçacığında ItemsControl kullanılmasının yasak olduğu ve bir özel durum oluşturduğu anlamına gelir. Aslında bu kısıtlama koleksiyon için de geçerlidir.
Koleksiyonu birden çok iş parçacığında kullanmak isteyebilirsiniz. Örneğin, bir "veri toplama" iş parçacığında koleksiyonu güncelleştirmek (öğeleri eklemek veya kaldırmak) ve sonuçları bir "kullanıcı arabirimi" iş parçacığında görüntülerken, kullanıcı arabiriminin veri toplama işlemi sırasında yanıt vermeye devam edebilmesini sağlamak istiyorsunuz. Böyle bir durumda, koleksiyona eşitlenmiş ("iş parçacığı güvenli") erişimi sağlamaktan ve WPF erişimin (özellikle CollectionView) aynı eşitleme mekanizmasına katılmasını garanti etmek sizin sorumluluğundadır. yöntemini çağırarak EnableCollectionSynchronization(IEnumerable, Object, CollectionSynchronizationCallback) , bunu semaforlar, sıfırlama olayı gibi bir eşitleme mekanizması kullanarak yapabilirsiniz.
Bir koleksiyonu birden çok iş parçacığında kullanmak için, bunlardan biri de öğesinin sahibi ItemsContrololan ui iş parçacığıdır:
Bir eşitleme mekanizması seçin.
Bu mekanizmayı kullanarak uygulamadan koleksiyona tüm erişimi eşitleyin.
WPF basit kilitleme dışında bir mekanizma kullandığınızı bildirmek için EnableCollectionSynchronization(IEnumerable, Object, CollectionSynchronizationCallback) aşırı yüklemesini çağırın.
Çağrı ui iş parçacığında gerçekleşmelidir.
Çağrı, koleksiyonu farklı bir iş parçacığında kullanmadan önce veya daha sonra olan koleksiyonuna ItemsControleklemeden önce gerçekleşmelidir.
Koleksiyonda yapılan bir değişikliğin ve bu değişikliğin bildiriminin (aracılığıyla INotifyCollectionChanged) atomik olduğundan emin olun; diğer iş parçacıklarından hiçbir erişim müdahalede bulunmaz. (Bu genellikle ücretsizdir. Örneğin, ObservableCollection<T> tüm değişikliklerin eşitleme tarafından korunması koşuluyla bunu garanti eder.)
çağrısı DisableCollectionSynchronizationyaparsanız, bu çağrı ui iş parçacığında da gerçekleşmelidir.
Aynı koleksiyonu birden çok kullanıcı arabirimi iş parçacığında kullanmak istiyorsanız, her ui iş parçacığında ayrı ayrı çağırmanız EnableCollectionSynchronization (ve DisableCollectionSynchronizationgerekirse) gerekir.
Kilitlenmekten kaçının. Eşitlemeyi kullanmayı seçtikten sonra bu zaten uygulamanın sorumluluğundadır, ancak WPF eşitlemeye katılımını da hesaba katmalıdır. (Daha fazla bilgi için aşağıya bakın.)
Buna karşılık, WPF aşağıdaki davranışı sağlar:
aşağıdaki CollectionView bağımsız değişkenlerle kayıtlı CollectionSynchronizationCallback öğesini çağırarak koleksiyona erişir:
-
collection: ilgi alanı koleksiyonu. -
context: kayıtlı bağlam nesnesi. -
accessMethod: gerçek erişimi gerçekleştiren bir temsilci. -
writeAccess:truetemsilci koleksiyonu değiştirecekse;falseaksi takdirde.
Koleksiyonda CollectionSynchronizationCallback eşitleme oluşturmalısınız (nesneyi ve
contextdeğeri uygun şekilde kullanarakwriteAccess), öğesini çağırıp eşitlemeyiaccessMethodserbest bırakın.-
, CollectionView kullanıcı arabirimi iş parçacığında kullanılmak üzere koleksiyonun "gölge kopyasını" tutar.
CollectionChanged olaylar geldikçe kuyruğa alınır (herhangi bir iş parçacığında).
Bekleyen olaylar, bunu yapma fırsatı olduğunda kullanıcı arabirimi iş parçacığında zaman uyumsuz olarak gölge kopyaya uygulanır.
doğrudan CollectionView uygulama tarafından görülebilen başka bir eşitleme mekanizması kullanmaz. Bu WPF kilitlenmeyi önlemeye yardımcı olma yöntemidir (önceki 7. öğeye bakın).
Bunun net etkisi, herhangi bir iş parçacığındaki koleksiyonu değiştirebilmenizdir ve bu değişiklikler sonunda kullanıcı arabirimi iş parçacığının ItemsControl "yakalama" zamanı olduğunda görünür. Uygulama, arka plan iş parçacıklarının ui iş parçacığını doygunluğunu ve normal kullanıcı girişine yanıt vermemeye karşı koruma sağlamak için ui iş parçacığına akışı değiştiren hızı azaltacak şekilde ayarlanmıştır.
context parametresi, öğesine callbackgeçirilen rastgele bir nesnedir. erişimi denetlemek için kullanılan eşitleme mekanizmasını belirlemek için collectionbunu kullanabilirsiniz.
Context olabilir null.