Compartir a través de


NameObjectCollectionBase.KeysCollection.ICollection.SyncRoot Propiedad

Definición

Obtiene un objeto que se puede usar para sincronizar el acceso a NameObjectCollectionBase.KeysCollection.

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

Valor de propiedad

Un objeto que se puede usar para sincronizar el acceso a la clase NameObjectCollectionBase.KeysCollection.

Implementaciones

Ejemplos

En el ejemplo de código siguiente se muestra cómo bloquear la colección mediante durante SyncRoot toda la enumeración.

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

La recuperación del valor de esta propiedad es una operación O(1).

Comentarios

Las clases derivadas pueden proporcionar su propia versión sincronizada de NameObjectCollectionBase.KeysCollection mediante la SyncRoot propiedad . El código de sincronización debe realizar operaciones en de SyncRootNameObjectCollectionBase.KeysCollection, no directamente en .NameObjectCollectionBase.KeysCollection De este modo, se garantiza el funcionamiento correcto de las colecciones derivadas de otros objetos. En concreto, mantiene la sincronización adecuada con otros subprocesos que podrían modificar simultáneamente el NameObjectCollectionBase.KeysCollection objeto.

Enumerar una colección no es intrínsecamente un procedimiento seguro para subprocesos. Incluso cuando una colección está sincronizada, otros subprocesos todavía pueden modificarla, lo que hace que el enumerador produzca una excepción. Con el fin de garantizar la seguridad para la ejecución de subprocesos durante la enumeración, se puede bloquear la colección durante toda la enumeración o detectar las excepciones resultantes de los cambios realizados por otros subprocesos.

Se aplica a

Consulte también