繁体   English   中英

联系人SearchAsync需要很长时间

[英]Contacts SearchAsync takes a long time

这是我的问题:我正在创建WP7应用程序,并且需要列出移动设备上的所有联系人。 我知道有使用方法SearchAsyncSearchCompleted事件处理程序的Contacts类。

除了一个细节,所有这些工作都是可行的。 当我在手机上使用该应用程序时,搜索需要12秒钟以上! 我正在使用数据虚拟化来快速绘制UI。 我的手机中大约有400位联系人。 因此,问题在于,经过很长时间才触发SearchCompleted :(

您对如何改进此解决方案有任何想法吗? 我应该从第一个字母(“ a”,“ b” ...)开始在列表框中插入联系人,但是那意味着我需要反复调用SearchAsync,然后如何合并它?

设备:三星Omnia 7

ThreadPool.QueueUserWorkItem(result =>
{
     _cachingRunning = true;
     var contacts = new Contacts();
     contacts.SearchCompleted += contacts_SearchCompleted;
     contacts.SearchAsync(string.Empty, FilterKind.None, null);
});

SearchAsync之后将近12秒调用此方法:

private void contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
            _phoneContacts = e.Results;
            Count = e.Results.Count();      

            Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    Cached = true;
                    _cachingRunning = false;
                    CachingChanged();
            });
 }

我存储_phoneContacts ,然后将其用于过滤; 在ListBox上进行数据虚拟化时,通过索引和计数来访问它。

此方法可与VirtualizingDataCollection (Telerik)“配合使用”并创建ViewModel项,该项将添加到VirtualizingDataCollection

public ObservableCollection<ExtendedContactModel> GetContactsRange(int startIndex, int count)
        {
            var collection = new ObservableCollection<ExtendedContactModel>();

            for (var i = startIndex; i < startIndex + count; i++)
            {
                var vo = ConvertToVO(_phoneContacts.ElementAt(i));
                var newContact = ConvertToExtendedContactModel(_phoneContacts.ElementAt(i), vo);

                collection.Add(newContact);
            }
            return collection;
        }

如果这是芒果设备,则有两种选择:

1)使用后台任务将联系人信息推送到特定于应用程序的数据存储中。 标准后台任务每30分钟运行一次,大约需要30秒才能执行。 可以在这里找到有关后台代理的更多信息: 后台代理

2)如果后台代理太吓人,则可以在过程中完成所有这些操作。 当用户打开应用程序时,后台线程可以收集联系人列表并将其保存到内部存储中。

尽管您需要花费时间来管理联系人的内部存储,但它使您可以控制联系人列表,并且肯定会改善用户体验,因为他们认为联系人搜索非常快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM