Udostępnij za pośrednictwem


NameObjectCollectionBase.KeysCollection.ICollection.IsSynchronized Właściwość

Definicja

Pobiera wartość wskazującą, czy dostęp do elementu NameObjectCollectionBase.KeysCollection jest synchronizowany (bezpieczny wątek).

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

Wartość właściwości

true jeśli dostęp do elementu NameObjectCollectionBase.KeysCollection jest synchronizowany (bezpieczny wątkowy); w przeciwnym razie false. Wartość domyślna to false.

Implementuje

Przykłady

W poniższym przykładzie kodu pokazano, jak zablokować kolekcję przy użyciu SyncRoot elementu w trakcie całego wyliczenia.

// 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

Pobieranie wartości tej właściwości jest operacją O(1).

Uwagi

Klasy pochodne mogą zapewnić własną zsynchronizowaną wersję NameObjectCollectionBase.KeysCollection przy użyciu SyncRoot właściwości . Synchronizowanie kodu musi wykonywać operacje na SyncRootNameObjectCollectionBase.KeysCollectionobiekcie , a nie bezpośrednio w obiekcie NameObjectCollectionBase.KeysCollection. Gwarantuje to prawidłowe funkcjonowanie kolekcji, które są uzyskiwane z innych obiektów. W szczególności utrzymuje właściwą synchronizację z innymi wątkami, które mogą być jednocześnie modyfikowane przez NameObjectCollectionBase.KeysCollection obiekt.

Wyliczanie w kolekcji nie jest wewnętrznie procedurą odporną na wielowątkowość. Nawet gdy kolekcja jest synchronizowana, inne wątki nadal mogą ją modyfikować. Powoduje to zgłaszanie wyjątku przez moduł wyliczający. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, można zablokować kolekcję podczas całego procesu wyliczania albo rejestrować wyjątki wynikłe ze zmian wprowadzanych przez inne wątków.

Dotyczy

Zobacz też