다음을 통해 공유


NameObjectCollectionBase.KeysCollection.ICollection.SyncRoot 속성

정의

NameObjectCollectionBase.KeysCollection에 대한 액세스를 동기화하는 데 사용할 수 있는 개체를 가져옵니다.

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

속성 값

NameObjectCollectionBase.KeysCollection에 대한 액세스를 동기화하는 데 사용할 수 있는 개체입니다.

구현

예제

다음 코드 예제에서는 전체 열거형 동안 을 SyncRoot 사용하여 컬렉션을 잠그는 방법을 보여줍니다.

// Create a collection derived from NameObjectCollectionBase
NameObjectCollectionBase^ myBaseCollection = gcnew DerivedCollection();
// Get the ICollection from NameObjectCollectionBase.KeysCollection
ICollection^ myKeysCollection = myBaseCollection->Keys;
bool lockTaken = false;
try
{
    Monitor::Enter(myKeysCollection->SyncRoot, lockTaken);
    for each (Object^ item in myKeysCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myKeysCollection->SyncRoot);
    }
}
// Create a collection derived from NameObjectCollectionBase
NameObjectCollectionBase myBaseCollection = new DerivedCollection();
// Get the ICollection from NameObjectCollectionBase.KeysCollection
ICollection myKeysCollection = myBaseCollection.Keys;
lock(myKeysCollection.SyncRoot)
{
    foreach (object item in myKeysCollection)
    {
        // Insert your code here.
    }
}
' Create a collection derived from NameObjectCollectionBase
Dim myBaseCollection As NameObjectCollectionBase = New DerivedCollection()
' Get the ICollection from NameObjectCollectionBase.KeysCollection
Dim myKeysCollection As ICollection = myBaseCollection.Keys
SyncLock myKeysCollection.SyncRoot
    For Each item As Object In myKeysCollection
        ' Insert your code here.
    Next item
End SyncLock

이 속성 값을 검색하는 것은 O(1) 연산입니다.

설명

파생 클래스는 속성을 사용하여 SyncRoot 자체 동기화된 버전을 NameObjectCollectionBase.KeysCollection 제공할 수 있습니다. 동기화 하는 코드에서 작업을 수행 해야 합니다 SyncRoot 의 합니다 NameObjectCollectionBase.KeysCollection에서 직접는 NameObjectCollectionBase.KeysCollection합니다. 이렇게 하면 다른 개체에서 파생되는 컬렉션에 대해 적절한 작업이 수행됩니다. 특히, 동시에 수정할 수 있는 다른 스레드와 적절 한 동기화를 유지 관리는 NameObjectCollectionBase.KeysCollection 개체입니다.

컬렉션 전체를 열거하는 프로시저는 기본적으로 스레드로부터 안전하지 않습니다. 컬렉션이 동기화되어 있을 때 다른 스레드에서 해당 컬렉션을 수정할 수 있으므로 이렇게 되면 열거자에서 예외가 throw됩니다. 열거하는 동안 스레드로부터 안전을 보장하려면 전체 열거를 수행하는 동안 컬렉션을 잠그거나 다른 스레드에서 변경된 내용으로 인해 발생한 예외를 catch하면 됩니다.

적용 대상

추가 정보