多线程windows手机应用程序

时间:2013-07-21 14:47:51

标签: c# multithreading windows-phone-7 windows-phone-8 windows-phone

我想让数据加载不是在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。 我尝试过类似上面的代码,但它不起作用。 你能帮帮我吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

尝试在构造函数中将AsanasItems初始化为空ObervableCollection<..>,并在显示的代码中不为其分配新的集合,只需使用AsanasItems.Add(..)逐个添加项目。< / p>

如果它不起作用,您需要为任何能够帮助您的人提供最小的工作样本。