CollectionBase.ICollection.IsSynchronized プロパティ

定義

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

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

プロパティ値

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

実装

注釈

CollectionBase インスタンスが同期されていません。A CollectionBase instance is not synchronized. 派生クラスは、SyncRoot プロパティを使用して、同期されたバージョンの CollectionBase を提供できます。Derived classes can provide a synchronized version of the CollectionBase 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.

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

// Get the ICollection interface from the CollectionBase
// derived class.
ICollection^ myCollection = myCollectionBase;
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 CollectionBase
// derived class.
ICollection myCollection = myCollectionBase;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}
' Get the ICollection interface from the CollectionBase
' derived class.
Dim myCollection As ICollection = myCollectionBase
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.

適用対象

こちらもご覧ください