ForEachItem.SyncRoot Propriedade

Definição

Obtém um objeto que pode ser usado para sincronizar o acesso à coleção.

public:
 property System::Object ^ SyncRoot { System::Object ^ get(); };
public object SyncRoot { get; }
member this.SyncRoot : obj
Public ReadOnly Property SyncRoot As Object

Valor da propriedade

Object

Um objeto que pode ser usado para sincronizar o acesso à coleção.

Implementações

Exemplos

O exemplo de código a seguir mostra como bloquear uma ArrayList coleção usando o SyncRoot durante a enumeração.

using System;  
using System.Collections;  

ArrayList myCollection = new ArrayList();  
lock( myCollection.SyncRoot )   
foreach ( Object item in myCollection )   
{  
    // Insert your code here.  
}  
Imports System  
Imports System.Collections  

Dim myCollection As ArrayList =  New ArrayList()   

lock(myCollection.SyncRoot)  
For Each item In myCollection  
    ' Insert your code here.  
Next  

Comentários

Implementa ICollection. IsSynchronized. Se você estiver criando uma coleção personalizada e derivando de DTSReadOnlyCollectionBase , poderá fornecer sua própria versão sincronizada da coleção usando a SyncRoot propriedade. O código de sincronização deve executar operações no SyncRoot da coleção, não diretamente na coleção. Isso garante a operação apropriada das coleções que são derivadas de outros objetos. Especificamente, ele mantém a sincronização adequada com outros threads que podem estar modificando o objeto simultaneamente.

A enumeração por meio de uma coleção não é um procedimento thread-safe intrínseco. Mesmo quando uma coleção é sincronizada, outros threads ainda podiam modificar a coleção, o que faz com que o enumerador lance uma exceção. Para garantir thread-safe durante a enumeração, é possível bloquear a coleção durante toda a enumeração ou verificar as exceções resultantes das alterações feitas por outros threads. Para obter mais informações, consulte ICollection. IsSynchronized.

Aplica-se a