ReadOnlyCollectionBase.ICollection.IsSynchronized プロパティ

定義

ReadOnlyCollectionBase オブジェクトへのアクセスが同期されている (スレッド セーフである) かどうかを示す値を取得します。Gets a value indicating whether access to a ReadOnlyCollectionBase object is synchronized (thread safe).

property bool System::Collections::ICollection::IsSynchronized { bool get(); };
bool System.Collections.ICollection.IsSynchronized { get; }
System.Collections.ICollection.IsSynchronized
 ReadOnly Property IsSynchronized As Boolean Implements ICollection.IsSynchronized

プロパティ値

true オブジェクトへのアクセスが同期されている (スレッド セーフである) 場合は ReadOnlyCollectionBase。それ以外の場合は falsetrue if access to the ReadOnlyCollectionBase object is synchronized (thread safe); otherwise, false. 既定値は、false です。The default is false.

実装

次のコード例は、列挙全体の中で SyncRoot プロパティを使用してコレクションをロックする方法を示しています。The following code example shows how to lock the collection using the SyncRoot property during the entire enumeration.

// Get the ICollection interface from the ReadOnlyCollectionBase
// derived class.
ICollection^ myCollection = myReadOnlyCollection;
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);
    }
}
// Get the ICollection interface from the ReadOnlyCollectionBase
// derived class.
ICollection myCollection = myReadOnlyCollection;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}
' Get the ICollection interface from the ReadOnlyCollectionBase
' derived class.
Dim myCollection As ICollection = myReadOnlyCollection
SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

このプロパティの値の取得は O(1) 操作です。Retrieving the value of this property is an O(1) operation.

注釈

ReadOnlyCollectionBase オブジェクトは同期されていません。A ReadOnlyCollectionBase object is not synchronized. 派生クラスは、SyncRoot プロパティを使用して、同期されたバージョンの ReadOnlyCollectionBase クラスを提供できます。Derived classes can provide a synchronized version of the ReadOnlyCollectionBase class using the SyncRoot property.

コレクションの列挙処理は、本質的にスレッドセーフな処理ではありません。Enumerating through a collection is intrinsically not a thread-safe procedure. コレクションが同期されていても、他のスレッドがコレクションを変更する場合があり、このときは列挙子から例外がスローされます。Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. 列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチします。To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.

適用対象

こちらもご覧ください