DictionaryBase.System.Collections.ICollection.SyncRoot プロパティ
メモ : この名前空間、クラス、およびメンバは、.NET Framework Version 1.1 だけでサポートされています。
DictionaryBase インスタンスへのアクセスを同期するために使用できるオブジェクトを取得します。
Private ReadOnly Property SyncRoot As Object Implements _ ICollection.SyncRoot
[C#]
object ICollection.SyncRoot {get;}
[C++]
private: __property Object*
System::Collections::ICollection::get_SyncRoot();
[JScript]
private function get ICollection.SyncRoot() : Object;
プロパティ値
DictionaryBase インスタンスへのアクセスを同期するために使用できるオブジェクト。
実装
解説
派生クラスでは、 SyncRoot プロパティを使用して、独自に DictionaryBase を同期させることができます。プログラム コードによる同期操作は、 DictionaryBase で直接実行するのではなく、 DictionaryBase の SyncRoot で実行する必要があります。これにより、他のオブジェクトから派生したコレクションの操作が正常に実行されます。特に、 DictionaryBase オブジェクトを同時に変更する可能性がある別スレッドとの間で、正常な同期を維持します。
コレクションの列挙処理は、本質的にはスレッド セーフな処理ではありません。コレクションが同期されている場合でも、他のスレッドがそのコレクションを変更する可能性はあり、そのような状況が発生すると列挙子は例外をスローします。列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチする方法のいずれかを実行できます。
[Visual Basic, C#] 列挙処理中に SyncRoot を使用してコレクションをロックする方法を次のコード例に示します。
DictionaryBase myCollection = new DictionaryBase();
lock( myCollection.SyncRoot ) {
foreach ( Object item in myCollection ) {
// Insert your code here.
}
}
[Visual Basic]
Dim myCollection As New DictionaryBase()
Dim item As Object
SyncLock myCollection.SyncRoot
For Each item In myCollection
' Insert your code here.
Next item
End SyncLock
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
DictionaryBase クラス | DictionaryBase メンバ | System.Collections 名前空間 | IsSynchronized | Hashtable.Synchronized