DTSReadOnlyCollectionBase.SyncRoot プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
DTSReadOnlyCollectionBaseへのアクセスを同期するために使用できるオブジェクトを取得します。
public:
property System::Object ^ SyncRoot { System::Object ^ get(); };
public object SyncRoot { get; }
member this.SyncRoot : obj
Public ReadOnly Property SyncRoot As Object
プロパティ値
DTSReadOnlyCollectionBaseへのアクセスを同期するために使用できるオブジェクト。
実装
例
以下のコード例は、列挙中のArrayListを使ってSyncRootコレクションをロックする方法を示しています。
using System;
using System.Collections;
ArrayList myCollection = new ArrayList();
lock( myCollection.SyncRoot )
foreach ( Object item in myCollection )
{
// Insert your code here.
}
Imports System
Imports System.Collections
Dim myCollection As ArrayList = New ArrayList()
lock(myCollection.SyncRoot)
For Each item In myCollection
' Insert your code here.
Next
注釈
ICollection.IsSynchronizedを実装します。 カスタムコレクションを作成し、 DTSReadOnlyCollectionBaseから派生する場合は、 SyncRoot プロパティを使って独自の同期版コレクションを提供できます。 同期コードは、コレクションに対して直接ではなく、コレクションの SyncRoot に対して操作を実行する必要があります。 これにより、他のオブジェクトから派生したコレクションの適切な操作が保証されます。 具体的には、同時にオブジェクトを修正している可能性のある他のスレッドとの適切な同期を維持します。
コレクションを列挙することは、本質的にスレッド セーフなプロシージャではありません。 コレクションが同期されている場合でも、他のスレッドがコレクションを変更して、列挙子が例外をスローする可能性があります。 列挙中のスレッド セーフを保証するには、列挙全体の間にコレクションをロックするか、他のスレッドによって行われた変更によって発生する例外をキャッチします。 詳細は ICollection.IsSynchronizedをご覧ください。