none
运行时遇到了错误 RRS feed

  • 问题

  • 使用ObserbleCollection,在频繁地对集合清空和删除的时候,容易报错。

    托管调试助手“FatalExecutionEngineError”在“C:\Users\SUFEI\AppxLayouts\8C262882.1860866CBCC8AVS.Debug_AnyCPU.tanbing\test.exe”中检测到问题。

    其他信息: 运行时遇到了错误。此错误的地址为 0x679cf7ab,在线程 0x434 上。错误代码为 0x80131544。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。

    2013年4月26日 6:02

答案

全部回复

  • ???
    • 已标记为答案 檀兵 2013年4月27日 4:54
    • 取消答案标记 檀兵 2013年4月27日 7:18
    • 已标记为答案 檀兵 2013年4月28日 9:07
    • 已编辑 Shi Xin 2016年5月16日 9:01
    2013年4月26日 6:16
  • 以前在对集合操作时都是加锁的,现在都把锁去掉了。不过记着以前也有这种错误
    2013年4月27日 4:55
  • 加锁也出问题。不过由于bug出现概率很小,不知道什么原因,有时候不快速进行删改操作,仍然会报bug,异常也不能捕获。
    • 已编辑 檀兵 2013年4月27日 7:21 错别字
    2013年4月27日 7:21
  • ???
    • 已编辑 Shi Xin 2016年5月16日 9:01
    2013年4月27日 7:58
  • 修改集合的时候,可以尝试先复制一份,修改复制的这份,然后再赋值回去。也避免在删除的时候频繁刷新。
    2013年4月27日 9:17
  • private System.Threading.SemaphoreSlim ss = new System.Threading.SemaphoreSlim(1);//防止多线程操作;

    在集合add之前调用ss.wait();

    在集合add之后调用ss.Release();

    在集合清空也做了同样操作,保证了多线程不会同时操作集合的可能性。

    有没有调试机制,可以发现是否有多线程对集合进行同时操作。

    2013年4月27日 10:59
  • 您说的是ObservableCollection在频繁更新造成的bug对吧,貌似问题也不是这个引起的,应该是多线程同时操作集合造成的吧。现在加上线程限制以后,bug还没有重现,本来几率就比较小,所以还不明白是不是这个问题造成的。

    2013年4月27日 11:04