根据Likness在《使用C#和XAML构建Windows 8应用》一书中的说法(第164页),"在执行异步任务时,必须请求延迟。"
因此,如果我没有将他的话断章取义,那么这段代码:
因此,如果我没有将他的话断章取义,那么这段代码:
private async Task<System.Collections.Generic.KeyValuePair<string, string>> SelectAContactForASlot()
{
KeyValuePair<string, string> kvp;
var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
contactPicker.CommitButtonText = "Select";
var contact = await contactPicker.PickSingleContactAsync();
if (contact != null)
{
kvp = new KeyValuePair<string, string>(contact.Name, contact.Emails[0].ToString());
return kvp;
}
return kvp = new KeyValuePair<string, string>("No Name found", "No email found");
}
应该改为这样:
private async Task<System.Collections.Generic.KeyValuePair<string, string>> SelectAContactForASlot()
{
var deferral = e.SuspendingOperation.GetDeferral();
KeyValuePair<string, string> kvp;
var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
contactPicker.CommitButtonText = "Select";
var contact = await contactPicker.PickSingleContactAsync();
if (contact != null)
{
kvp = new KeyValuePair<string, string>(contact.Name, contact.Emails[0].ToString());
return kvp;
}
return kvp = new KeyValuePair<string, string>("No Name found", "No email found");
deferral.Complete();
}
Correct?