我想让数据加载不是在ui线程中而是在后台线程中。 我已经尝试了谷歌的几个例子,但它仍然没有用。
ThreadPool.QueueUserWorkItem((o) =>
{
IList<Asana> asanasRepo = null;
var asanasRepository = this.GetService<IAsanasRepository>();
asanasRepo = asanasRepository.GetAllAsanas();
Asanas = asanasRepo.Select(x => new AsanasListItemViewModel
{
AsanaId = x.AsanaId,
AsanaLevel = InfrastructureHelper.GetLevel(x.AsanaLevel),
CoverImagePath = string.Format("/Content/Images/{0}", x.CoverImageFileName),
UsualAsanaTitle = x.UsualTitle,
YogaAsanaTitle = x.YogaTitle
}).ToObservableCollection();
asanasDispatcher.BeginInvoke(() =>
{
AsanasItems.Clear();
AsanasItems = (from asana in Asanas
group asana by asana.AsanaLevel into c
orderby c.Key
select new Group<AsanasListItemViewModel>(c.Key, c)
).ToObservableCollection();
});
});
主要思想是从数据库中加载数据而不是在ui线程中,但是在后台,当加载数据时将其渲染到ui。 我尝试过类似上面的代码,但它不起作用。 你能帮帮我吗? 谢谢!
答案 0 :(得分:3)
尝试在构造函数中将AsanasItems
初始化为空ObervableCollection<..>
,并在显示的代码中不为其分配新的集合,只需使用AsanasItems.Add(..)
逐个添加项目。< / p>
如果它不起作用,您需要为任何能够帮助您的人提供最小的工作样本。