我有这种情况,在我的 Windows Phone 应用程序中。
当提供电话号码时,我有一个函数需要返回联系人的 DisplayName。
public string GetDisplayName(string number)
{
Contacts contactsBook = new Contacts();
contactsBook.SearchCompleted += contactsBook_SearchCompleted;
contactsBook.SearchAsync(number, FilterKind.PhoneNumber, null);
//return .....; How will I be able to return the display name here?
}
由于 SearchAsync 返回类型为 void,我不能在这里使用 await 关键字。那么我怎么能在这里设计这个功能呢?
是否推荐在这里使用一些线程信号方法?(我会在 SearchAsync 方法之后等待一个事件,然后在 SearchCompleted 事件中触发该事件)
我想要这样一个功能的原因是,我从我的服务器获得了一组数字,我会在 UI 中显示相应的名称。
<phone:LongListSelector ItemsSource="{Binding PhoneNumberCollection}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding PhoneNumber, Converter={StaticResource PhoneNumberToNameConverter}}" />
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
我会有如下的 IValueConverter 转换器
public class PhoneNumberToNameConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ContactsManager.Instance.GetDisplayName((string)value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}