收集

2010-04-10 45 views
1

缺少的元素我有一個集合收集

ObservableCollection<string> outoverList 

而且我有召喚寶典

outoverList.Add("out:"+element.tagName); 

函數調用集合了幾次功能,但有時收集丟失的元素。我們調用一個函數 - >函數添加元素 - >集合有9個元素(例如) - >在下一個函數調用集合中只有8個元素。缺少一個元素。

這裏Resharpers查找用法記錄:

Search target 
    FindElementHandler.outoverList:ObservableCollection<string> 
Found 3 usages in solution 
    <FindElementExperiments> (3 items) 
    FindElementHandler.cs (3 items) 
     (50,13) outoverList = new ObservableCollection<string>(); 
     (94,13) outoverList.Add("out:"+element.tagName); 
     (118,13) outoverList.Add("over:" + element.tagName); 

正如你看到的,我只是添加元素集合無處不在。我還沒有刪除元素代碼。

也許我做錯了什麼,你可以看看截屏: http://www.youtube.com/watch?v=Ei6dQnHCMIc

我是新手,往往與各種問題遇到,但這個錯誤看起來神祕的對我。

P/S/ 對不起,英語

回答

1

兩個可能的可能性發生對我說:

  1. 你有一些其他的代碼(可能是事件處理程序響應觀察集合的事件,或者另一個線程)明確調用remove。要檢查這一點,我會添加一些調試代碼,訂閱可觀察集合,並在刪除項目時寫入跟蹤行 - 這應該很快回答它
  2. 您有多個線程,並且正在發生線程競爭情況。請注意,此集合不同步,所以如果多個線程同時更改(添加/刪除/重新分配),則所有投注都將關閉,並且完全可能丟失數據,尤其是Add。要檢查這一點,我會使用與上面相同的跟蹤處理程序,但我會包括(在輸出Thread.CurrentThread.ManagedThreadId