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 的访问的对象。

实现

示例

下面的代码示例演示如何使用SyncRoot枚举期间锁定ArrayList集合。

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

适用于