Рисование множества полилиний на карте останавливает приложение на несколько минут до завершения задачи? - PullRequest
0 голосов
/ 11 марта 2020

Я рисую полилинию на карте Google через свойства ноги / ступени. Тем не менее, существует 50 000 точек расположения между источником и местом назначения, которые, в свою очередь, замораживают приложение на несколько минут до завершения задачи.

Что я делаю неправильно?

Обновление [Код]:

if(googleDirection.Routes != null && googleDirection.Routes.Count() > 0)
{
     List<Position> coordinates = new List<Position>
     var steps = googleDirection.Routes.SelectMany(s=>s.Legs).SelectMany(s=>s.Steps);
     int i = 0;
     foreach(var step in steps.AsEnumerable())
     {
        var points = PolylineHelper.Decode(step.Polyline.Points);
        foreach(var p in points)
        {
           coordinates.Add(p):
        }
     }

     RouteDrawCommand.Execute(coordinates);
}

1 Ответ

0 голосов
/ 11 марта 2020

Привет, вы можете попробовать запустить l oop в фоновом потоке асинхронно, а не синхронно. как то так:

    if(googleDirection.Routes != null && googleDirection.Routes.Count() > 0)
    {
         List<Position> coordinates = new List<Position>
         var steps = googleDirection.Routes.SelectMany(s=>s.Legs).SelectMany(s=>s.Steps);
         int i = 0;

 Task.Factory.StartNew(() =>
    {
        foreach(var step in steps.AsEnumerable())
         {
            var points = PolylineHelper.Decode(step.Polyline.Points);
            foreach(var p in points)
            {
               coordinates.Add(p):
            }
         }
    }) 
    .Unwrap() 
    .ContinueWith(task =>
    {
        // executes in UI thread.
        RouteDrawCommand.Execute(coordinates);
    }, TaskScheduler.FromCurrentSynchronizationContext()); 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...