DTSReadOnlyCollectionBase.SyncRoot Свойство

Определение

Получает объект, с помощью которого можно синхронизировать доступ к коллекции DTSReadOnlyCollectionBase.

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

Значение свойства

Объект, который может быть использован для синхронизации доступа к коллекции DTSReadOnlyCollectionBase.

Реализации

Примеры

В следующем примере кода показано, как заблокировать коллекцию ArrayList с помощью SyncRoot перечисления.

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  

Комментарии

Реализует ICollection.IsSynchronized. При создании пользовательской коллекции и наследуемой от DTSReadOnlyCollectionBaseнее можно указать собственную синхронизированную версию коллекции с помощью SyncRoot свойства. Синхронный код должен выполнять операции с SyncRoot коллекцией, а не непосредственно в коллекции. Это обеспечивает правильную работу коллекций, являющихся производными других объектов. В частности, он поддерживает правильную синхронизацию с другими потоками, которые могут одновременно изменять объект.

Перечисление коллекции не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки по-прежнему могут изменять коллекцию, что приводит к возникновению исключения перечислителем. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками. Дополнительные сведения см. в разделе ICollection.IsSynchronized.

Применяется к