StringCollection.SyncRoot 属性

定义

获取可用于同步对 StringCollection 的访问的对象。

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

属性值

Object

用于同步对 StringCollection 的访问的对象。

实现

注解

派生类可以提供自己的使用SyncRoot属性的StringCollection同步版本。 The synchronizing code must perform operations on the SyncRoot of the StringCollection, not directly on the StringCollection. 这样可确保对从其他对象派生的集合正确地执行操作。 具体而言,它与可能同时修改 StringCollection 对象的其他线程保持适当的同步。

通过集合进行枚举本质上不是线程安全过程。 即使某个集合已同步,其他线程仍可以修改该集合,这会导致枚举数引发异常。 若要确保枚举过程中的线程安全性,可以在整个枚举期间锁定集合,或者捕获由其他线程进行的更改所导致的异常。

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

StringCollection^ myCollection = gcnew StringCollection();
bool lockTaken = false;
try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}
StringCollection myCollection = new StringCollection();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}
Dim myCollection As New StringCollection()
SyncLock myCollection.SyncRoot
    For Each item as Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

检索此属性的值的运算复杂度为 O(1)。

适用于

另请参阅