我有一个调用 UpdateCollections 方法的方法,该方法目前正在按顺序更新 3个ObservableCollection<T>
对象。为了提高这 3 个集合的性能和更新时间延迟,我想在单独的线程或其他任何方式中执行此操作,并在 3 个集合更新中的任何一个完成时通知调用者和 UI,并且还能够保留跨线程更新,因为所有 3集合对象是同一主集合对象的一部分。
以下是目前按顺序运行的示例代码:
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
- 任务并行库
- 反应式扩展(可以通过
IObservable
为类实现CustomObservableCollection
- 异步/等待
Thread
班级
我可以使用上面的任何方法或其他更好的方法,但我最担心并行更新时可能出现的跨线程异常,因为所有 3 个集合对象都是同一个自定义集合对象的一部分。