SortedList.Synchronized メソッド
SortedList 用の同期された (スレッド セーフな) ラッパーを返します。
Public Shared Function Synchronized( _
ByVal list As SortedList _) As SortedList
[C#]
public static SortedList Synchronized(SortedListlist);
[C++]
public: static SortedList* Synchronized(SortedList* list);
[JScript]
public static function Synchronized(
list : SortedList) : SortedList;
パラメータ
- list
同期する SortedList 。
戻り値
SortedList 用の同期された (スレッド セーフな) ラッパー。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | list が null 参照 (Visual Basic では Nothing) です。 |
解説
SortedList を確実にスレッド セーフにするためには、すべての操作をこのラッパー経由で実行する必要があります。
コレクションの列挙処理は、本質的にはスレッド セーフな処理ではありません。コレクションが同期されている場合でも、他のスレッドがそのコレクションを変更する可能性はあり、そのような状況が発生すると列挙子は例外をスローします。列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチする方法のいずれかを実行できます。
[Visual Basic, C#] 列挙処理中に SyncRoot を使用してコレクションをロックする方法を次のコード例に示します。
SortedList myCollection = new SortedList();
lock( myCollection.SyncRoot ) {
foreach ( Object item in myCollection ) {
// Insert your code here.
}
}
[Visual Basic]
Dim myCollection As New SortedList()
Dim item As Object
SyncLock myCollection.SyncRoot
For Each item In myCollection
' Insert your code here.
Next item
End SyncLock
使用例
[Visual Basic, C#, C++] SortedList を同期する方法と、 SortedList が同期されているかどうかを確認し、同期済みの SortedList を使用する方法の例を次に示します。
Imports System
Imports System.Collections
Imports Microsoft.VisualBasic
Public Class SamplesSortedList
Public Shared Sub Main()
' Creates and initializes a new SortedList.
Dim mySL As New SortedList()
mySL.Add(2, "two")
mySL.Add(3, "three")
mySL.Add(1, "one")
mySL.Add(0, "zero")
mySL.Add(4, "four")
' Creates a synchronized wrapper around the SortedList.
Dim mySyncdSL As SortedList = SortedList.Synchronized(mySL)
' Displays the sychronization status of both SortedLists.
Dim msg As String
If mySL.IsSynchronized Then
msg = "synchronized"
Else
msg = "not synchronized"
End If
Console.WriteLine("mySL is {0}.", msg)
If mySyncdSL.IsSynchronized Then
msg = "synchronized"
Else
msg = "not synchronized"
End If
Console.WriteLine("mySyncdSL is {0}.", msg)
End Sub
End Class
' This code produces the following output.
'
' mySL is not synchronized.
' mySyncdSL is synchronized.
[C#]
using System;
using System.Collections;
public class SamplesSortedList {
public static void Main() {
// Creates and initializes a new SortedList.
SortedList mySL = new SortedList();
mySL.Add( 2, "two" );
mySL.Add( 3, "three" );
mySL.Add( 1, "one" );
mySL.Add( 0, "zero" );
mySL.Add( 4, "four" );
// Creates a synchronized wrapper around the SortedList.
SortedList mySyncdSL = SortedList.Synchronized( mySL );
// Displays the sychronization status of both SortedLists.
Console.WriteLine( "mySL is {0}.", mySL.IsSynchronized ? "synchronized" : "not synchronized" );
Console.WriteLine( "mySyncdSL is {0}.", mySyncdSL.IsSynchronized ? "synchronized" : "not synchronized" );
}
}
/*
This code produces the following output.
mySL is not synchronized.
mySyncdSL is synchronized.
*/
[C++]
#using <mscorlib.dll>
#using <system.dll>
using namespace System;
using namespace System::Collections;
int main() {
// Creates and initializes a new SortedList.
SortedList* mySL = new SortedList();
mySL->Add( __box(2), S"two" );
mySL->Add( __box(3), S"three" );
mySL->Add( __box(1), S"one" );
mySL->Add( __box(0), S"zero" );
mySL->Add( __box(4), S"four" );
// Creates a synchronized wrapper around the SortedList.
SortedList* mySyncdSL = SortedList::Synchronized( mySL );
// Displays the sychronization status of both SortedLists.
Console::WriteLine( S"mySL is {0}.", mySL->IsSynchronized ? S"synchronized" : S"not synchronized" );
Console::WriteLine( S"mySyncdSL is {0}.", mySyncdSL->IsSynchronized ? S"synchronized" : S"not synchronized" );
}
/*
This code produces the following output.
mySL is not synchronized.
mySyncdSL is synchronized.
*/
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
SortedList クラス | SortedList メンバ | System.Collections 名前空間 | IsSynchronized | SyncRoot