2009-12-29 62 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。