Exportieren (0) Drucken
Alle erweitern

ICollection.SyncRoot-Eigenschaft

Aktualisiert: November 2007

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

Namespace:  System.Collections
Assembly:  mscorlib (in mscorlib.dll)

Object SyncRoot { get; }
/** @property */
Object get_SyncRoot()

function get SyncRoot () : Object

Eigenschaftenwert

Typ: System.Object
Ein Objekt, mit dem der Zugriff auf ICollection synchronisiert werden kann.

Bei Auflistungen, die einen nicht öffentlich verfügbaren Speicher verwenden, wird eine Implementierung erwartet, die die aktuelle Instanz zurückgibt. Beachten Sie, dass der Zeiger auf die aktuelle Instanz eventuell nicht ausreichend ist bei Auflistungen, die andere Auflistungen enthalten. Hier sollte die SyncRoot-Eigenschaft der zugrunde liegenden Auflistung zurückgegeben werden.

Die meisten Auflistungsklassen im Namespace System.Collections implementieren darüber hinaus eine Synchronized-Methode, die einen synchronisierten Wrapper um die zugrunde liegende Auflistung zur Verfügung stellt. Abgeleitete Klassen können jedoch mithilfe der SyncRoot-Eigenschaft eine eigene synchronisierte Version der Auflistung bereitstellen. Im Synchronisierungscode dürfen Vorgänge nicht direkt für die Auslistung ausgeführt werden. Stattdessen müssen sie für die SyncRoot-Eigenschaft der Auflistung ausgeführt werden. 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.

Wenn in einer Auflistung keine Synchronized-Methode zur Verfügung steht, sollte SyncRoot wie folgt verwendet werden:

ICollection MyCollection;
// Instantiate and populate the collection
 lock(MyCollection.SyncRoot) {
  // Some operation on the collection, which is now thread safe.
 }

Die Enumeration einer Auflistung ist systemintern keine threadsichere Prozedur. 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. Sie können während der Enumeration Threadsicherheit gewährleisten, indem Sie entweder die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen abfangen, die durch Änderungen anderer Threads ausgelöst werden.

Im folgenden Codebeispiel wird veranschaulicht, wie die Auflistung mithilfe der SyncRoot-Eigenschaft während der gesamten Enumeration gesperrt wird.

ICollection MyCollection;
// Instantiate and populate the collection
 lock(myCollection.SyncRoot) {
  foreach (Object item in myCollection) {
  // Insert your code here.
  }
 }

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile für Smartphone, Windows Mobile für Pocket PC, Xbox 360

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 3.5, 2.0, 1.0

XNA Framework

Unterstützt in: 2.0, 1.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft