【问题标题】:C# Project ObservableCollectionC# 项目 ObservableCollection
【发布时间】:2017-09-10 06:08:47
【问题描述】:

我继承了一个 C# 项目,但对于如何解决问题感到非常困惑。

基本上我有一个类会产生一个新的通信线程。该通信线程接收数据并简单地将这些数据作为自定义类添加到 ObservableCollection。

主类还启动了另一个新线程,它处理 ObservableCollection,它基本上是 linq 查询的负载,并且根据所需的组合等触发代码中的不同内容。它是一个连续的 while 循环,在完成所有检查后会短暂休眠

现在它完全可行,这个处理可能比下一条消息需要更长的时间,因此为什么它不会发生在收到的消息触发器中。

它执行的第一个 linq 之一是 Collection.where(....).OrderByDescending(....).ToList();

这经常给我错误“集合已修改;枚举操作可能无法执行”错误。 这是有道理的,我正在阅读,而通讯线程正在写入它。

对我来说解决这个问题的最佳架构是什么?

【问题讨论】:

    标签: c#


    【解决方案1】:

    你可以考虑双缓冲:

    • 您开始在集合 A 中收集消息
    • 当您的处理线程启动时,它会将 Comms 任务定向到集合 B(需要锁定!)。
    • 然后它处理集合 A,然后将其清除。
    • 下次处理线程启动时,它会将通信任务定向到集合 A,然后再处理集合 B,等等

    PS:你为什么使用ObservableCollection?你可以例如使用简单的列表,因为当有新消息到达时您似乎没有使用任何通知

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2015-07-13
      相关资源
      最近更新 更多