次の方法で共有


ForEachItems.SyncRoot プロパティ

ForEachItems コレクションへのアクセスの同期に使用できるオブジェクトを取得します。

名前空間:  Microsoft.SqlServer.Dts.Runtime.Enumerators.Item
アセンブリ:  Microsoft.SqlServer.ManagedDTS (Microsoft.SqlServer.ManagedDTS.dll)

構文

'宣言
Public ReadOnly Property SyncRoot As Object 
    Get
'使用
Dim instance As ForEachItems 
Dim value As Object 

value = instance.SyncRoot
public Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get () sealed;
}
abstract SyncRoot : Object 
override SyncRoot : Object
final function get SyncRoot () : Object

プロパティ値

型: System.Object
ForEachItems コレクションへのアクセスの同期に使用できるオブジェクトです。

実装

ICollection.SyncRoot

説明

ICollection.IsSynchronized を実装します。 DTSReadOnlyCollectionBase から派生したカスタム コレクションを作成している場合は、SyncRoot プロパティを使用して、同期されたコレクションを独自に提供することができます。 同期コードでは、コレクションを直接操作するのではなく、コレクションの SyncRoot に対して操作を行う必要があります。 こうすることにより、他のオブジェクトから派生したコレクションを適切に操作することができます。 特に、オブジェクトを同時に変更している可能性がある他のスレッドとの同期が適切に保たれます。

コレクションの列挙処理は、本質的にスレッドセーフな処理ではありません。 コレクションが同期されている場合でも、他のスレッドがコレクションを変更する場合があります。その場合、列挙子が例外をスローします。 列挙処理中のスレッド セーフを確保するには、列挙処理中はコレクションをロックするか、または他のスレッドによって加えられた変更に起因する例外をキャッチします。 詳細については、「ICollection.IsSynchronized」を参照してください。

使用例

次のコード例では、SyncRoot を使用して列挙の間 ArrayList コレクションをロックします。

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

関連項目

参照

ForEachItems クラス

Microsoft.SqlServer.Dts.Runtime.Enumerators.Item 名前空間