ForEachItem.SyncRoot Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает объект, который можно использовать для синхронизации доступа к коллекции.
public:
property System::Object ^ SyncRoot { System::Object ^ get(); };
public object SyncRoot { get; }
member this.SyncRoot : obj
Public ReadOnly Property SyncRoot As Object
Значение свойства
Объект, который может быть использован для синхронизации доступа к коллекции.
Реализации
Примеры
В следующем примере кода показано, как заблокировать коллекцию 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.