CollectionBase.ICollection.SyncRoot Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá objekt, který lze použít k synchronizaci přístupu k CollectionBase.
property System::Object ^ System::Collections::ICollection::SyncRoot { System::Object ^ get(); };
object System.Collections.ICollection.SyncRoot { get; }
member this.System.Collections.ICollection.SyncRoot : obj
ReadOnly Property SyncRoot As Object Implements ICollection.SyncRoot
Hodnota vlastnosti
Objekt, který lze použít k synchronizaci přístupu k objektu CollectionBase.
Implementuje
Poznámky
Odvozené třídy mohou poskytovat vlastní synchronizovanou verzi CollectionBase použití SyncRoot vlastnosti. Synchronizační kód musí provádět operace s SyncRootCollectionBase, nikoli přímo na straně CollectionBase. Tím se zajistí správná operace kolekcí odvozených z jiných objektů. Konkrétně udržuje správnou synchronizaci s jinými vlákny, která mohou současně upravovat CollectionBase objekt.
Výčet prostřednictvím kolekce není vnitřně bezpečným postupem vlákna. I když je kolekce synchronizována, ostatní vlákna mohou stále upravovat kolekci, což způsobí, že enumerátor vyvolá výjimku. Chcete-li zaručit bezpečnost vláken během výčtu, můžete buď uzamknout kolekci během celého výčtu, nebo zachytit výjimky vyplývající z změn provedených jinými vlákny.
Následující příklad kódu ukazuje, jak uzamknout kolekci pomocí SyncRoot celého výčtu:
// Get the ICollection interface from the CollectionBase
// derived class.
ICollection myCollection = myCollectionBase;
lock(myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
' Get the ICollection interface from the CollectionBase
' derived class.
Dim myCollection As ICollection = myCollectionBase
SyncLock myCollection.SyncRoot
For Each item As Object In myCollection
' Insert your code here.
Next item
End SyncLock
Načtení hodnoty této vlastnosti je O(1) operace.