簡體   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