我想知道是否可以异步地将子项添加到stackpanel(或任何其他元素)。似乎所有项目都会立即呈现。
如果我使用后台工作人员或调度员,这并不重要。始终结果是相同的 - 当所有项目都已添加后,它们就会显示出来。
我想拥有的是这样的:
Deployment.Current.Dispatcher.BeginInvoke(() => {
foreach (var item in items.Skip(x).Take(pageSize))
{
// when this row is executed new item should be visible
ItemsList.Children.Add(new _ListItem(item));
}
});
问候 最大
答案 0 :(得分:4)
此片段每500毫秒将新的TextBlock添加到stackPanel,而不冻结UI。项目在添加后立即在UI中可见:
ThreadPool.QueueUserWorkItem(_ => {
foreach (int item in Enumerable.Range(1,50)) {
Thread.Sleep(500);//simulate some calculations here
int item1 = item;
Deployment.Current.Dispatcher.BeginInvoke(() => {
stackPanel.Children.Add(new TextBlock(){Text = "Text "+item1});
});
}
});
答案 1 :(得分:1)
您应该使用ObservableCollection类来存储要显示的项目。该类实现了INotifyCollectionChanged接口,这将允许它在添加和删除项目时更新UI。
以下是有关binding to an ObservableCollection和updating the UI as items are added的详细信息(请参阅此demo)。
此外,您可能需要使用Dispatcher添加/删除项目。