次の方法で共有


DTSReadOnlyCollectionBase.SyncRoot Property

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

名前空間: Microsoft.SqlServer.Dts.Runtime
アセンブリ: Microsoft.SqlServer.ManagedDTS (microsoft.sqlserver.manageddts.dll 内)

構文

'宣言
Public ReadOnly Property SyncRoot As Object
public Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get () sealed;
}
/** @property */
public final Object get_SyncRoot ()
public final function get SyncRoot () : Object

プロパティ値

DTSReadOnlyCollectionBase へのアクセスの同期に使用できるオブジェクトです。

解説

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

スレッド セーフ

この型の public static (Microsoft Visual Basic では共有 ) メンバは、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。

プラットフォーム

開発プラットフォーム

サポートされているプラットフォームの一覧については、「SQL Server 2005 のインストールに必要なハードウェアおよびソフトウェア」を参照してください。

対象プラットフォーム

サポートされているプラットフォームの一覧については、「SQL Server 2005 のインストールに必要なハードウェアおよびソフトウェア」を参照してください。

参照

関連項目

DTSReadOnlyCollectionBase Class
DTSReadOnlyCollectionBase Members
Microsoft.SqlServer.Dts.Runtime Namespace