gpt4 book ai didi

c# - 从异步方法使用 View 上的数据

转载 作者:行者123 更新时间:2023-11-30 21:36:23 25 4
gpt4 key购买 nike

我正在使用地理定位器插件来检索我的当前位置并向页面添加图钉。这是为此提供的服务:

任务.cs

public async Task<Plugin.Geolocator.Abstractions.Position> GetDeviceCurrentLocation()
{
try
{
var locator = Plugin.Geolocator.CrossGeolocator.Current;
locator.DesiredAccuracy = 50;

var position = await locator.GetPositionAsync(TimeSpan.FromSeconds(1));

if (position != null)
{
return position;
}
}
catch (Exception ex)
{
Debug.WriteLine("Unable to get location, may need to increase timeout: " + ex);
}

return new Plugin.Geolocator.Abstractions.Position();
}

我正在尝试在这样的 View 中使用它:

public MapPage(List<Models.xxx> xxx, Models.yyy yyy )
{
InitializeComponent();
Tasks ts = new Tasks();
var myLocation = ts.GetDeviceCurrentLocation();
var latitudeIm = myLocation.Result.Latitude;
var longitudeIm = myLocation.Result.Longitude;
var pin1 = new Pin
{
Type = PinType.Place,
Position = new Position(latitudeIm, longitudeIm),
Title = "My Location"
};
customMap.Pins.Add(pin1);
}

当我尝试这段代码时,我的应用程序中断了 var latitudeIm = myLocation.Result.Latitude;我想因为我有一个异步任务,所以结果必须是 awaited .知道如何使用 public async Task<Plugin.Geolocator.Abstractions.Position> GetDeviceCurrentLocation() 我认为数据?

最佳答案

异步方法应该使用await

var myLocation = await ts.GetDeviceCurrentLocation();
var latitudeIm = myLocation.Latitude;
var longitudeIm = myLocation.Longitude;

您应该将所有方法完全装饰成async。如果你不能应用它(我不推荐它),你可以使用 ConfigureAwait 来防止死锁;

var position = await locator.GetPositionAsync(TimeSpan.FromSeconds(1)).ConfigureAwait(false);

var myLocation = ts.GetDeviceCurrentLocation().Result;//Also don't hit the Result twice
var latitudeIm = myLocation.Latitude;
var longitudeIm = myLocation.Longitude;

关于c# - 从异步方法使用 View 上的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48279756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com