Sdílet prostřednictvím


NameObjectCollectionBase.KeysCollection.ICollection.IsSynchronized Vlastnost

Definice

Získá hodnotu označující, zda je přístup k NameObjectCollectionBase.KeysCollection je synchronizován (bez vláken).

property bool System::Collections::ICollection::IsSynchronized { bool get(); };
bool System.Collections.ICollection.IsSynchronized { get; }
member this.System.Collections.ICollection.IsSynchronized : bool
 ReadOnly Property IsSynchronized As Boolean Implements ICollection.IsSynchronized

Hodnota vlastnosti

true pokud je přístup k NameObjectCollectionBase.KeysCollection souboru synchronizovaný (bezpečný z více vláken), v opačném případě false. Výchozí formát je false.

Implementuje

Příklady

Následující příklad kódu ukazuje, jak zamknout kolekci SyncRoot pomocí příkazu během celého výčtu.

// Create a collection derived from NameObjectCollectionBase
NameObjectCollectionBase^ myBaseCollection = gcnew DerivedCollection();
// Get the ICollection from NameObjectCollectionBase.KeysCollection
ICollection^ myKeysCollection = myBaseCollection->Keys;
bool lockTaken = false;
try
{
    Monitor::Enter(myKeysCollection->SyncRoot, lockTaken);
    for each (Object^ item in myKeysCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myKeysCollection->SyncRoot);
    }
}
// Create a collection derived from NameObjectCollectionBase
NameObjectCollectionBase myBaseCollection = new DerivedCollection();
// Get the ICollection from NameObjectCollectionBase.KeysCollection
ICollection myKeysCollection = myBaseCollection.Keys;
lock(myKeysCollection.SyncRoot)
{
    foreach (object item in myKeysCollection)
    {
        // Insert your code here.
    }
}
' Create a collection derived from NameObjectCollectionBase
Dim myBaseCollection As NameObjectCollectionBase = New DerivedCollection()
' Get the ICollection from NameObjectCollectionBase.KeysCollection
Dim myKeysCollection As ICollection = myBaseCollection.Keys
SyncLock myKeysCollection.SyncRoot
    For Each item As Object In myKeysCollection
        ' Insert your code here.
    Next item
End SyncLock

Načtení hodnoty této vlastnosti je operace O(1).

Poznámky

Odvozené třídy mohou poskytovat vlastní synchronizovanou verzi NameObjectCollectionBase.KeysCollection pomocí SyncRoot vlastnosti. Synchronizující kód musí provádět operace s objektem SyncRootNameObjectCollectionBase.KeysCollection, nikoli přímo na NameObjectCollectionBase.KeysCollection. Tím zajistíte správnou funkci kolekcí, které jsou odvozeny z jiných objektů. Konkrétně udržuje správnou synchronizaci s jinými vlákny, která můžou současně upravovat NameObjectCollectionBase.KeysCollection objekt.

Výčet prostřednictvím kolekce nemůže být procedurou bezpečnou pro přístup z více vláken. I v případě, že jde o synchronizovanou kolekci, mohou úpravy provádět i ostatní vlákna, což způsobuje vyvolání výjimky enumerátorem. K zaručení bezpečnosti přístupu z více vláken můžete buďto zamknout kolekci na celou dobu práce s výčtem, nebo zachycovat výjimky vzniklé v důsledku změn prováděných ostatními vlákny.

Platí pro

Viz také