Share via


SyncRoot プロパティ

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

名前空間:  Microsoft.SqlServer.Dts.Tasks.Exec80PackageTask
アセンブリ:  Microsoft.SqlServer.Exec80PackageTask (Microsoft.SqlServer.Exec80PackageTask.dll)

構文

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

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

プロパティ値

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

実装

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