StringCollection.SyncRoot 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取可用于同步对 StringCollection 的访问的对象。
public:
property System::Object ^ SyncRoot { System::Object ^ get(); };
public object SyncRoot { get; }
member this.SyncRoot : obj
Public ReadOnly Property SyncRoot As 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)。