【问题标题】:Xamarin Essentials Geolocation Timeout IssueXamarin Essentials 地理位置超时问题
【发布时间】:2019-06-01 16:17:29
【问题描述】:

我有一个多平台应用程序,它提取当前位置并在循环中使用它来计算到每个项目的距离。它正在使用

wineriesView.ItemsSource = await App.WineryManager.GetWineries(seltyp,selval,selwrs);

加载包含纬度和经度等的每个项目。它在呼唤

public Task<List<WineryItem>> GetWineries(string typ, string val, int wrs) { return restService.ReadWineries(typ,val,wrs); }

然后调用

    public async Task<List> ReadWineries(string typ, string val, int wrs)
{
        var position = await Geolocation.GetLocationAsync();
        var uri = new Uri(string.Format(Constants.WineriesUrl, "wineries_by_region.php?region=piedmont"));
        var urio = new Uri(string.Format(Constants.OnlinesUrl, "onlines_by_id.php?id=12"));
        Items = new List<WineryItem>();
        OItems = new List<OnlineItem>();
    ...

var content = await response.Content.ReadAsStringAsync();
            Records = JsonConvert.DeserializeObject<WineryRecords>(content);
            Items = new List<WineryItem>();
            foreach (var record in Records.records)
            {
                Location winePosition = new Location(Convert.ToDouble(record.Latitude), Convert.ToDouble(record.Longitude));
                double dblDistance = Location.CalculateDistance(position, winePosition, DistanceUnits.Miles);

...

if (dblDistance > 0 && dblDistance < 1000)
                    {
                        item.intDistance = Convert.ToInt16(dblDistance);
                        item.strDistance = dblDistance.ToString("N0")+"Mi";
                    } else
                    {
                        item.intDistance = 0;
                        item.strDistance = "--";
                    }
                    Items.Add(item);

ReadWineries 执行所有显示的代码,它只返回 10 项到列表中,而如果我注释地理位置、位置和计算距离代码,它将返回 50+ 的整个列表。如何延长此任务的超时时间,以便即使需要更长的时间它也会返回所有项目? 我正在 Android 设备上调试它。如果我使用 iOS 设备会有所不同吗?最后,它需要在两者上运行。我尝试设置 getlocation 的准确性,但这没有帮助。似乎该应用程序在每次调用计算距离时都陷入了困境。有什么想法吗?

【问题讨论】:

    标签: xamarin.forms geolocation xamarin.essentials


    【解决方案1】:

    如何延长此任务的超时时间,以便它返回所有项目,即使它需要更长的时间?

    如果你想达到这个目标,你可以使用Task.DelayTask.WhenAny来做到这一点。

    这是同一篇文章,你可以看看:

    C# Xamarin Forms - Executing task, with timeout

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多