2017-09-09 14 views
0

私はC#プロジェクトを継承しており、問題の修正方法について実際に困惑しています。C#Project ObservableCollection

基本的に私は、新しい通信スレッドを生成するクラスを持っています。この通信スレッドはデータを受信し、このデータをObservableCollectionにカスタムクラスとして追加するだけです。

メインクラスはまた別の新しいスレッドを開始し、これはのObservableCollectionを処理し、その基本的にはLINQの帖の負荷や必要な組み合わせに応じて、などは、コードに異なるものをトリガします。

これで完璧に実行可能なこの処理は、受信したトリガーでは発生しないため、次のメッセージよりも時間がかかります。それがない最初のLINQの

つCollection.where(....)OrderByDescending(....)でToListメソッド()。。。

これは頻繁に私にエラーを与えている「コレクションが変更されました。列挙操作が実行されないことがあり、」エラーが発生しました。 どちらの意味があるのですか、通信スレッドが書き込みを行っている間は、私は読んでいます。

これを解決するには最適なアーキテクチャは何ですか?

答えて

2

あなたは、ダブルバッファリングを考慮することができます:あなたは、処理スレッドが開始したときに、それが収集B(!必要をロック)へのCommsタスクを指示し、コレクション

  • でメッセージを集め始める

    • を。
    • それはコレクションAを処理し、後でそれをクリアします。
    • 次回それが収集Bを処理する前に、収集Aに途切れタスクを指示し、開始しthreas処理など

    PS:なぜあなたはObservableCollectionを使用していますか?たとえば、新しいメッセージが到着したときに通知を使用していないように思われるので、単純なリストを使用してください。

  • 関連する問題