CollectionBase.ICollection.SyncRoot Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar ett objekt som kan användas för att synkronisera åtkomsten CollectionBasetill .
property System::Object ^ System::Collections::ICollection::SyncRoot { System::Object ^ get(); };
object System.Collections.ICollection.SyncRoot { get; }
member this.System.Collections.ICollection.SyncRoot : obj
ReadOnly Property SyncRoot As Object Implements ICollection.SyncRoot
Egenskapsvärde
Ett objekt som kan användas för att synkronisera åtkomsten CollectionBasetill .
Implementeringar
Kommentarer
Härledda klasser kan tillhandahålla en egen synkroniserad version av egenskapen med hjälp SyncRoot av CollectionBase egenskapen . Synkroniseringskoden måste utföra åtgärder på SyncRoot , CollectionBaseinte direkt på CollectionBase. Detta säkerställer korrekt drift av samlingar som härleds från andra objekt. Mer specifikt upprätthåller den korrekt synkronisering med andra trådar som kan ändra CollectionBase objektet samtidigt.
Att räkna upp genom en samling är i sig inte en trådsäker procedur. Även när en samling synkroniseras kan andra trådar fortfarande ändra samlingen, vilket gör att uppräknaren genererar ett undantag. För att garantera trådsäkerheten under uppräkningen kan du antingen låsa samlingen under hela uppräkningen eller fånga undantagen från ändringar som gjorts av andra trådar.
Följande kodexempel visar hur du låser samlingen med hela SyncRoot uppräkningen:
// Get the ICollection interface from the CollectionBase
// derived class.
ICollection myCollection = myCollectionBase;
lock(myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
' Get the ICollection interface from the CollectionBase
' derived class.
Dim myCollection As ICollection = myCollectionBase
SyncLock myCollection.SyncRoot
For Each item As Object In myCollection
' Insert your code here.
Next item
End SyncLock
Att hämta värdet för den här egenskapen är en O(1) åtgärd.