缺少收集的元素

时间:2010-04-10 07:48:23

标签: c# observablecollection

我有一个集合

ObservableCollection<string> outoverList

我有一个调用集合的功能

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

函数调用集合几次,但有时集合丢失元素。 我们称之为函数 - &gt; function添加元素 - &gt;集合有9个元素(例如) - &gt;在下一个函数中,调用集合只有8个元素。缺少一个要素。

Resharpers Find usages log:

   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 个答案:

答案 0 :(得分:1)

我有两种可能的可能性:

  1. 你有一些其他代码(可能是一个事件处理程序响应可观察集合的事件,或者可能是另一个线程)明确调用remove。为了检查这一点,我将添加一些订阅可观察集合的调试代码,并在删除项目时写入跟踪行 - 这应该很快回答
  2. 你有多个线程,并且正在发生线程竞争的情况。请注意,此集合未同步,因此如果多个线程同时更改它(添加/删除/重新分配),则所有投注都将关闭,并且完全可能会丢失数据,特别是Add。要检查这一点,我会使用与上面相同的跟踪处理程序,但我会包含(在输出中Thread.CurrentThread.ManagedThreadId