0

ObservableCollection<T>現在、3 つのオブジェクトを順次更新するUpdateCollectionsメソッドを呼び出すメソッドがあります。これら 3 つのコレクションのパフォーマンスと更新時間の遅延を改善するために、別のスレッドなどでそれを行い、3 つのコレクションの更新のいずれかが完了したときに呼び出し元と UI に通知し、クロススレッドの更新を保持できるようにしたいと考えています。コレクション オブジェクトは、同じメイン コレクション オブジェクトの一部です。

以下は、現時点で順次実行されるサンプル コードです。

public class CustomObservableCollection
{
    public ObservableCollection<T> CollectionObject1;
    public ObservableCollection<T> CollectionObject2;
    public ObservableCollection<T> CollectionObject3;

    public void UpdateCollectionX...N(CustomObservableCollection objectWithOnlyUpdates)
    {.............}
}

public class SomeBusinessClass
{
    CustomObservableCollection mainCollectionObject;
    public void UpdateCollections(CustomObservableCollection objectWithUpdatesOnly)
    {
        mainCollectionObject.UpdateCollection1(objectWithUpdatesOnly);
        mainCollectionObject.UpdateCollection2(objectWithUpdatesOnly);
        mainCollectionObject.UpdateCollection3(objectWithUpdatesOnly);
    }
}

UpdateCollectionX基本的には、上記のコードを見て、メソッドを並列または個別のスレッドで呼び出したいので、以下のようにいくつかの選択肢を見つけました。これを達成するための最良の方法は何ですか。また、現在のコードをどのように変換すれば、コレクションの更新メソッドの 1 つが完了するとすぐに、何らかの通知が呼び出し元のメソッドおよび/または UI に送信されます (更新するため)。それ自体をWPFアプリとして):

  1. タスク並列ライブラリ
  2. Reactive Extensions (IObservableクラスに実装することによる場合があります)CustomObservableCollection
  3. 非同期/待機
  4. Threadクラス

上記の方法または他のより良い方法を使用できますが、3 つのコレクション オブジェクトすべてが同じカスタム コレクション オブジェクトの一部であるため、並列更新中に発生する可能性があるクロス スレッド例外が最も心配です。

4

0 に答える 0