Evaluar y enviar comentarios
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2005/.NET Framework 2.0

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
ICollection.SyncRoot (Propiedad)

Obtiene un objeto que se puede utilizar para sincronizar el acceso a ICollection.

Espacio de nombres: System.Collections
Ensamblado: mscorlib (en mscorlib.dll)

Visual Basic (Declaración)
ReadOnly Property SyncRoot As Object
Visual Basic (Uso)
Dim instance As ICollection
Dim value As Object

value = instance.SyncRoot
C#
Object SyncRoot { get; }
C++
property Object^ SyncRoot {
    Object^ get ();
}
J#
/** @property */
Object get_SyncRoot ()
JScript
function get SyncRoot () : Object

Valor de propiedad

Objeto que se puede utilizar para sincronizar el acceso a ICollection.

Para las colecciones cuyo almacenamiento subyacente no esté disponible públicamente, la implementación esperada tan sólo debe devolver la instancia actual. Hay que tener en cuenta que el puntero que señala a la instancia actual puede no ser suficiente para las colecciones que contienen otras colecciones; éstas deben devolver la propiedad SyncRoot de la colección subyacente.

La mayoría de las clases de colección del espacio de nombres System.Collections también implementan un método Synchronized que proporciona un contenedor sincronizado alrededor de la colección subyacente. No obstante, las clases derivadas pueden proporcionar su propia versión sincronizada de la colección mediante la propiedad SyncRoot. El código de sincronización debe realizar operaciones en la propiedad SyncRoot de la colección, no directamente en la colección. Esto garantiza un funcionamiento correcto de las colecciones que se derivan de otros objetos. En concreto, mantiene la sincronización correcta con otros subprocesos que podrían modificar al mismo tiempo la instancia de la colección.

Si no hay un método Synchronized en una colección, el uso esperado de SyncRoot presenta el siguiente aspecto:

C#
ICollection MyCollection =...
 lock(MyCollection.SyncRoot) {
  // Some operation on the collection, which is now thread safe.
 }
Visual Basic
Dim myCollection as New ICollection()
 SyncLock myCollection.SyncRoot
  ' Some operation on the collection, which is now thread safe.
 End SyncLock

Por su naturaleza, la enumeración mediante una colección no es un procedimiento seguro para la ejecución de 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, es posible bloquear la colección durante toda la enumeración o detectar las excepciones provocadas por los cambios que efectúen otros subprocesos.

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

C#
ICollection myCollection = new ICollection();
 lock(myCollection.SyncRoot) {
  foreach (Object item in myCollection) {
  // Insert your code here.
  }
 }
Visual Basic
Dim myCollection As New ICollection()
 Dim item As Object
 SyncLock myCollection.SyncRoot
  For Each item In myCollection
  ' Insert your code here.
  Next item
 End SyncLock

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 2.0, 1.0
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2009 Microsoft Corporation. Reservados todos los derechos. Términos de uso | Marcas Registradas | Privacidad
Page view tracker