Udostępnij za pośrednictwem


NameObjectCollectionBase.ICollection.SyncRoot Właściwość

Definicja

Pobiera obiekt, który może służyć do synchronizowania dostępu do NameObjectCollectionBase obiektu.

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

Wartość właściwości

Obiekt, który może służyć do synchronizowania dostępu do NameObjectCollectionBase obiektu.

Implementuje

Uwagi

Klasy pochodne mogą zapewnić własną zsynchronizowaną wersję NameObjectCollectionBase klasy przy użyciu SyncRoot właściwości . Synchronizowanie kodu musi wykonywać operacje na SyncRoot właściwości NameObjectCollectionBase obiektu, a nie bezpośrednio w NameObjectCollectionBase obiekcie. 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 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.

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

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

Dotyczy

Zobacz też