PropertyCollection.ICollection.SyncRoot Eigenschaft

Definition

Ruft ein Objekt ab, mit dem der Zugriff auf ICollection synchronisiert werden kann.

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

Eigenschaftswert

Object

Ein Objekt, mit dem der Zugriff auf ICollection synchronisiert werden kann.

Implementiert

Hinweise

Bei Auflistungen, die einen nicht öffentlich verfügbaren Speicher verwenden, besteht die erwartete Implementierung in der Rückgabe der aktuellen Instanz. Beachten Sie, dass der Zeiger auf die aktuelle Instanz möglicherweise nicht ausreichend für Sammlungen ist, die andere Sammlungen umschließen; diese sollten die SyncRoot-Eigenschaft der zugrunde liegenden Auflistung zurückgeben.

Die meisten Auflistungsklassen im Namespace implementieren auch eine Synchronisierte Methode, die einen synchronisierten Wrapper um System.Collections die zugrunde liegende Auflistung bereitstellt. Abgeleitete Klassen können jedoch mithilfe der SyncRoot-Eigenschaft eine eigene synchronisierte Version der Auflistung bereitstellen. Der Synchronisierungscode muss Vorgänge auf der SyncRoot Auflistung ausführen, nicht direkt auf der Auflistung. Dies gewährleistet die einwandfreie Funktion von Auflistungen, die von anderen Objekten abgeleitet sind. Im Besonderen wird die ordnungsgemäße Synchronisierung mit anderen Threads gewährleistet, die eventuell zur gleichen Zeit Änderungen an der Auflistungsinstanz vornehmen.

In Abwesenheit einer synchronisierten Methode in einer Auflistung sieht die erwartete Verwendung SyncRoot wie folgt aus:

ICollection MyCollection =...  
 lock(MyCollection.SyncRoot) {  
  // Some operation on the collection, which is now thread safe.  
 }  
Dim myCollection as New ICollection()  
 SyncLock myCollection.SyncRoot  
  ' Some operation on the collection, which is now thread safe.  
 End SyncLock  

Das Aufzählen durch eine Auflistung ist nicht ein sicheres Threadverfahren. Selbst wenn eine Auflistung synchronisiert wird, besteht die Möglichkeit, dass andere Threads sie ändern. Dies führt dazu, dass der Enumerator eine Ausnahme auslöst. Um während der Enumeration Threadsicherheit zu gewährleisten, können Sie entweder die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen, die aus von anderen Threads stammenden Änderungen resultieren, abfangen.

Im folgenden Codebeispiel wird gezeigt, wie Sie die Auflistung mithilfe SyncRoot der gesamten Enumeration sperren:

ICollection myCollection = new ICollection();  
 lock(myCollection.SyncRoot) {  
  foreach (Object item in myCollection) {  
  // Insert your code here.  
  }  
 }  
Dim myCollection As New ICollection()  
 Dim item As Object  
 SyncLock myCollection.SyncRoot  
  For Each item In myCollection  
  ' Insert your code here.  
  Next item  
 End SyncLock  

Gilt für

Siehe auch