ForEachItem.SyncRoot Properti

Definisi

Mendapatkan objek yang dapat digunakan untuk menyinkronkan akses ke koleksi.

public:
 property System::Object ^ SyncRoot { System::Object ^ get(); };
public object SyncRoot { get; }
member this.SyncRoot : obj
Public ReadOnly Property SyncRoot As Object

Nilai Properti

Objek yang dapat digunakan untuk menyinkronkan akses ke koleksi.

Penerapan

Contoh

Contoh kode berikut menunjukkan cara mengunci ArrayList koleksi menggunakan SyncRoot selama enumerasi.

using System;  
using System.Collections;  

ArrayList myCollection = new ArrayList();  
lock( myCollection.SyncRoot )   
foreach ( Object item in myCollection )   
{  
    // Insert your code here.  
}  
Imports System  
Imports System.Collections  

Dim myCollection As ArrayList =  New ArrayList()   

lock(myCollection.SyncRoot)  
For Each item In myCollection  
    ' Insert your code here.  
Next  

Keterangan

Mengimplementasikan ICollection.IsSynchronized. Jika Anda membuat koleksi kustom dan berasal dari DTSReadOnlyCollectionBase, Anda dapat menyediakan versi koleksi anda sendiri yang disinkronkan menggunakan SyncRoot properti . Kode sinkronisasi harus melakukan operasi pada SyncRoot koleksi, bukan langsung pada koleksi. Ini memastikan pengoperasian koleksi yang tepat yang berasal dari objek lain. Secara khusus, ini mempertahankan sinkronisasi yang tepat dengan utas lain yang mungkin secara bersamaan memodifikasi objek.

Menghitung melalui koleksi secara intrinsik bukan prosedur aman utas. Bahkan ketika koleksi disinkronkan, utas lain masih dapat memodifikasi koleksi, yang menyebabkan enumerator melemparkan pengecualian. Untuk menjamin keamanan utas selama enumerasi, Anda dapat mengunci koleksi selama seluruh enumerasi atau menangkap pengecualian yang dihasilkan dari perubahan yang dibuat oleh utas lain. Untuk informasi selengkapnya, lihat ICollection.IsSynchronized.

Berlaku untuk