Xamarin Google Map - PullRequest
       4

Xamarin Google Map

1 голос
/ 16 марта 2019

Я делаю цикл в Xamarin, который добавляет пин-код в карту Google. Было интересно, почему он не отображает карту немедленно?

Я хочу, чтобы вывод булавки добавлялся на карту по одному, поэтому я добавил Sleep на 1 секунду, чтобы отложить построение графика.

Я думаю, что причина в том, что он работает на коде, лежащем позади для построения, поэтому метод использования кода ниже будет недействительным.

for(int i = 0;i < templist.Count ; i++)
        {
            if (i != 0)
            {
                if (MyMap.Pins.Count > 9) { 
                    MyMap.Pins.RemoveAt(0);
                }
            }

            var Item = templist.ElementAt(i);
            string resultDatetimer = Item.DateTimer;
            string resultLocation = Item.Location;
            string resultLatitude = Item.Latitude;
            string resultLongitude = Item.Longitude;


            var position = new Position(Convert.ToDouble(resultLatitude), Convert.ToDouble(resultLongitude));

            var pin1 = new Pin
            {
                Type = PinType.Place,
                Position = position,
                Label = "Date:" + resultDatetimer + ", Location:" + resultLocation
            };

            MyMap.Pins.Add(pin1);

            MyMap.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(Convert.ToDouble(resultLatitude), Convert.ToDouble(resultLongitude))
                 , Distance.FromMeters(500)));
System.Threading.Thread.Sleep(1000);
        }

1 Ответ

3 голосов
/ 16 марта 2019

1) Не используйте System.Threading.Thread.Sleep, так как это блокирующий вызов, и если вы находитесь в потоке пользовательского интерфейса, ваш пользовательский интерфейс / клавиатура / сенсорные входы и т. Д. Все просто заморозились на этот период времени, используйте ожидаемый Task.Delay вместо этого, чтобы насос сообщений для этого потока мог продолжаться.

await Task.Delay(1000);

2) Если ваш код работает в фоновом потоке, убедитесь, что вы выполняете добавление pin и movetoregion в потоке пользовательского интерфейса.

Device.BeginInvokeOnMainThread(() =>
{
    MyMap.Pins.Add(pin1);
    MyMap.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(Convert.ToDouble(resultLatitude), Convert.ToDouble(resultLongitude))
     , Distance.FromMeters(500)));
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...