2009-12-29 89 views
0

我的代碼是舊代碼,它使用ArrayList來存儲集合的元素。我用的是m_objects.SyncRootlocking purpose before delete the objectIList的SyncRoot

 lock(m_objects.SyncRoot) 
     { 
      m_objects.Remove(obj); 

     } 

現在的問題是,我現在想從ArrayList改變m_objects類型List<T>,我遇到的問題與上面的代碼。什麼是List<T>的相關產品SyncRoot

回答

0

什麼,因爲我明白SyncRoot觀念已經過時,不使用太多反正。 大多數人用lock(){}塊代替。

public class SomeClass { 
    private readonly object listLock = new object(); 
    private readonly List<string> yourList = new List<string>(); 

    public void DeleteItem(string item) { 
    lock (listLock) { 
     yourList.Remove(item) 
    } 
    } 
} 
1

據我瞭解的概念,SyncRoot只是一個用於鎖定的對象。它只是爲了避免你創建一個鎖定對象。所以必須做同樣的事情

Object m_objectsLock = new Object(); 

lock(m_objectsLock) 
{ 
    m_objects.Remove(obj); 

} 

您必須確保在使用SyncRoot的任何地方都使用m_objectsLock。