NameObjectCollectionBase.KeysCollection.ICollection.IsSynchronized Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Wert ab, der angibt, ob der Zugriff auf die NameObjectCollectionBase.KeysCollection synchronisiert (threadsicher) ist.
property bool System::Collections::ICollection::IsSynchronized { bool get(); };
bool System.Collections.ICollection.IsSynchronized { get; }
member this.System.Collections.ICollection.IsSynchronized : bool
ReadOnly Property IsSynchronized As Boolean Implements ICollection.IsSynchronized
Eigenschaftswert
true
, wenn der Zugriff auf das NameObjectCollectionBase.KeysCollection synchronisiert (threadsicher) ist, andernfalls false
. Der Standardwert ist false
.
Implementiert
Beispiele
Im folgenden Codebeispiel wird gezeigt, wie die Auflistung während der gesamten Enumeration mit gesperrt SyncRoot wird.
// Create a collection derived from NameObjectCollectionBase
NameObjectCollectionBase^ myBaseCollection = gcnew DerivedCollection();
// Get the ICollection from NameObjectCollectionBase.KeysCollection
ICollection^ myKeysCollection = myBaseCollection->Keys;
bool lockTaken = false;
try
{
Monitor::Enter(myKeysCollection->SyncRoot, lockTaken);
for each (Object^ item in myKeysCollection)
{
// Insert your code here.
}
}
finally
{
if (lockTaken)
{
Monitor::Exit(myKeysCollection->SyncRoot);
}
}
// Create a collection derived from NameObjectCollectionBase
NameObjectCollectionBase myBaseCollection = new DerivedCollection();
// Get the ICollection from NameObjectCollectionBase.KeysCollection
ICollection myKeysCollection = myBaseCollection.Keys;
lock(myKeysCollection.SyncRoot)
{
foreach (object item in myKeysCollection)
{
// Insert your code here.
}
}
' Create a collection derived from NameObjectCollectionBase
Dim myBaseCollection As NameObjectCollectionBase = New DerivedCollection()
' Get the ICollection from NameObjectCollectionBase.KeysCollection
Dim myKeysCollection As ICollection = myBaseCollection.Keys
SyncLock myKeysCollection.SyncRoot
For Each item As Object In myKeysCollection
' Insert your code here.
Next item
End SyncLock
Das Abrufen des Werts dieser Eigenschaft ist ein O(1)-Vorgang.
Hinweise
Abgeleitete Klassen können mithilfe der SyncRoot -Eigenschaft eine eigene synchronisierte Version von NameObjectCollectionBase.KeysCollection bereitstellen. Der Synchronisierungscode muss Vorgänge für den SyncRoot von NameObjectCollectionBase.KeysCollectionausführen, nicht direkt für .NameObjectCollectionBase.KeysCollection Dies gewährleistet die einwandfreie Funktion von Auflistungen, die von anderen Objekten abgeleitet sind. Insbesondere wird eine ordnungsgemäße Synchronisierung mit anderen Threads beibehalten, die NameObjectCollectionBase.KeysCollection das Objekt möglicherweise gleichzeitig ändern.
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. 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.