【问题标题】:Append contacts in contact list in WP8在 WP8 的联系人列表中添加联系人
【发布时间】:2014-11-05 12:31:01
【问题描述】:

我想从 xml 文件向联系人列表中添加多个联系人,但 saveContactTask.Show(); 在联系人列表中添加了一位联系人,请任何人告诉我如何解决此问题。

这是我的代码:

private void AddContacts(object sender, RoutedEventArgs e) {

        using (IsolatedStorageFile istf = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream istfs = istf.OpenFile("MyContacts.xml",FileMode.Open))
            {
                XDocument doc = XDocument.Load(istfs);
                var query = from d in doc.Root.Descendants("Contacts")
                            select new
                            {
                                firstName = d.Element("name").Value,
                                mobilePhone = d.Element("phone").Value
                            };

                foreach (var po in query)
                {

                    saveContactTask.FirstName = po.firstName;
                    saveContactTask.MobilePhone = po.mobilePhone;
                    saveContactTask.Show();


                }

            }
      }

【问题讨论】:

标签: windows-phone-8


【解决方案1】:

SaveContactTask 类旨在一次仅添加一个联系人,并且 Show() 函数是异步的。在第一个通话结束之前,您无法添加第二个联系人。您的代码应该被重写以对saveContactTask.Completed += new EventHandler<SaveContactResult>(saveContactTask_Completed); 事件做出反应,并仅在前一个联系人完成后才开始添加第二个(等)联系人。有可能,新的SaveContactTask 应该用于第二个(等)联系人,请记住。

尝试这样的事情(这只是一个想法):

private List<Contact> listToAdd;
private SaveContactTask saveTask;

saveTask.Completed += addComplete;

void addComplete(...)
{
   if ( listToAdd.Count > 0 )
   {
       Contact contact = listToAdd[0];
       listToAdd.RemoveAt(0);
       saveTask. (set values from contact)
       saveTask.Show();
   }
}

【讨论】:

  • 成功添加第一个联系人后,它退出了foreach循环,如何解决这个问题?而不是 foreach 我应该选择其他解决方案吗?
  • 是的,您需要另一种解决方案。您正在 UI 线程中工作,您无法停止它并等待操作完成。尝试在 saveContactTask.Completed 函数中使用类级别变量创建循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
相关资源
最近更新 更多