我在private async Task
签名方法中附上了以下代码。我的问题是ObservableCollection<Goods> goods = new ObservableCollection<Goods>();
在下面的代码Device.BeginInvokeOnMainThread
完成之前执行。在进入下一行之前,如何确保执行所有代码并正确获取值,即ObservableCollection<Goods> goods = new ObservableCollection<Goods>();
请注意,我在Task.Run()
之前使用了等待Device...
,但没有结果。
请帮忙。
Device.BeginInvokeOnMainThread(() =>
{
Location loc = new Location();
GpsData = locService.GetLocation();
a = GpsData.Latitude;
b = GpsData.Longitude;
});
ObservableCollection<Goods> goods = new ObservableCollection<Goods>();
答案 0 :(得分:0)
使用以下方法提取GPS位置检索代码:
async Task GetGpsData()
{
var tcs = new TaskCompletionSource<bool>();
Device.BeginInvokeOnMainThread(() => {
try
{
Location loc = new Location();
GpsData = locService.GetLocation();
a = GpsData.Latitude;
b = GpsData.Longitude;
tcs.SetResult(true);
}
catch (Exception ex)
{
tcs.SetException(ex);
}
});
return tcs.Task;
}
然后按如下方式使用它:
await GetGpsData();
ObservableCollection<Goods> goods = new ObservableCollection<Goods>();
修改强>
GetGpsData()
是一种私有方法,应该没有问题async
。然而,它基本上意味着调用者代码也必须是async
。如果无法做到这一点,请执行以下操作:
GetGpsData().Wait();
ObservableCollection<Goods> goods = new ObservableCollection<Goods>();