我试图加载我们事件目录中的所有用户并将它们显示在列表框中。但是,如果我像往常一样这样做,我会长时间卡住 UI 线程。那么无论如何我可以使用一个任务在后台线程上填充这个集合,同时在我插入新名称时仍然让列表框更新吗?
最佳答案
因为你不能在一个单独的线程(或任务,等等)中加载所有数据然后填充 ObservableCollection,你可以将当前的 Dispatcher 传递给操作并使用它的 InvokeAsync 方法将元素一个一个地添加到 Observable UI 线程中的集合。像这样:
public void FetchAndLoad()
{
// Called from the UI, run in the ThreadPool
Task.Factory.StartNew( () =>
this.FetchAsync(e => this.Dispatcher.InvokeAsync(
() => this.observableCollection.Add(e)
)
));
}
public void Fetch(Action<string> addDelegate)
{
// Dummy operation
var list = new List<string>("Element1", "Element2");
foreach (var item in list)
addDelegate(item);
}
不过,我会根据元素的数量分批进行。
关于c# - 使用任务加载 ObservableCollection<string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13501064/