C# 缺失的收藏元素

C# 缺失的收藏元素,c#,observablecollection,C#,Observablecollection,我有一个收藏 ObservableCollection<string> outoverList outoverList.Add("out:"+element.tagName); 函数多次调用集合,但有时集合会丢失元素。 我们调用一个函数->函数添加元素->集合有9个元素(例如)->在下一个函数中调用集合只有8个元素。缺少一个元素 在这里,resharper可以找到usages日志: Search target FindElementHandler.outoverList

我有一个收藏

ObservableCollection<string> outoverList
outoverList.Add("out:"+element.tagName);
函数多次调用集合,但有时集合会丢失元素。 我们调用一个函数->函数添加元素->集合有9个元素(例如)->在下一个函数中调用集合只有8个元素。缺少一个元素

在这里,resharper可以找到usages日志:

   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);
搜索目标
FindElementHandler.outoverList:ObservableCollection
在解决方案中找到3种用法
(3项)
FindElementHandler.cs(3项)
(50,13)outoverList=新的可观测集合();
(94,13)outoverList.Add(“out:+element.tagName”);
(118,13)outoverList.Add(“over:+element.tagName”);
正如您所看到的,我只是将元素添加到集合中。我没有删除代码中的元素

也许我做错了什么你可以看看屏幕截图:

我是新手,经常遇到各种各样的问题,但是这个bug对我来说很神秘

p/S/
对不起,英语

我想到了两种可能的情况:

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

  • 我想到了两种可能的情况:

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