【发布时间】:2016-06-23 23:18:14
【问题描述】:
我正在开发一个使用位置解析地址的 UWP MVVM 应用程序:
private async void ResolveAddress()
{
//TODO : Manage cancel
Debug.WriteLine("Resolving adress ...");
var result = await MapLocationFinder.FindLocationsAtAsync(SelectedLocation);
if (result.Status == MapLocationFinderStatus.Success)
{
if (result.Locations.Count > 0)
{
Debug.WriteLine("Adress resolved : " + Address);
Address = result.Locations[0].Address.FormattedAddress;
}
}
Debug.WriteLine("Resolve fail");
}
此调用可能非常频繁地发生(基于用户选择的位置),因此在进行其他调用时该方法可能尚未完成运行。
//Binding property
public Geopoint SelectedLocation
{
get { return _selectedLocation; }
set
{
Debug.WriteLine("Location change");
_selectedLocation = value;
ResolveAddress();
RaisePropertyChanged();
}
}
Adress 字段也是一个绑定属性。
我在这个实现中遇到了 2 个问题:
- 我不确定地址字段是否是最后选择的位置(呼叫 N-1 可以在 N 之后完成)。
- 地址字段逐步包含所有已解析的地址,我只想要最后一个。
我找到了取消异步任务的方法:
https://msdn.microsoft.com/fr-fr/library/jj155759.aspx
但 MapLocationFinder.FindLocationsAtAsync 在参数中没有取消标记。
最好的方法是什么?
谢谢。
【问题讨论】:
-
在属性集上调用异步函数不是一个好习惯。尝试改变任何事件。要么在
SelectionChanged活动上,要么是这样做的最佳场所
标签: c# mvvm async-await uwp