C# 在后台线程上筛选反应列表

C# 在后台线程上筛选反应列表,c#,wpf,reactiveui,C#,Wpf,Reactiveui,我有一个需要过滤的对象集合。过滤器回调非常耗时,因此我需要在后台线程上运行它。 我使用CreateDerivedCollection(..)创建一个派生的被动列表 \u reactiveCollection=RawFileList.CreateDerivedCollection(新函数((s)=>s), new Func((s)=>OnFilter(s)),null,RxApp.TaskpoolScheduler); 我使用RxApp.TaskpoolScheduler在后台线程上执行操作,但

我有一个需要过滤的对象集合。过滤器回调非常耗时,因此我需要在后台线程上运行它。 我使用CreateDerivedCollection(..)创建一个派生的被动列表

\u reactiveCollection=RawFileList.CreateDerivedCollection(新函数((s)=>s),
new Func((s)=>OnFilter(s)),null,RxApp.TaskpoolScheduler);
我使用RxApp.TaskpoolScheduler在后台线程上执行操作,但仍然在UI线程上调用过滤器回调

如何在后台线程上执行集合过滤,并在UI线程中通知集合更改


被动收集用作ItemsControl的ItemSource,因此必须在UI线程上通知更改。

当您创建列表时,第一个筛选器不会被安排,它只会在创建列表的任何线程上运行,但后续更改将在任务池上,重设将在调用它们的任何线程上运行。既然您想在向UI线程发出警报之前先准备整个列表,那么换掉列表是否有效?比如在后台线程上准备一个新列表,然后将其设置为某个ImmutableList属性?这里有一个很好的例子@ShaneNeuville谢谢你的awnser。最后,我没有使用被动派生列表。我刚刚在BackgroundWorker中创建了我的筛选列表,并在RunWorkerCompleted回调中分配给了我的ItemSource。
_reactiveCollection = RawFileList.CreateDerivedCollection<string, string>(new Func<string, string>((s) => s),
                    new Func<string, bool>((s) => OnFilter(s)),null,RxApp.TaskpoolScheduler);