Есть ли способ сделать слайдер динамически меняет свое значение? - PullRequest
1 голос
/ 10 мая 2019

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

но проблема в том, что когда я помещаю цикл while для обновления значения расстояния, я получаю ошибку в своем пользовательском интерфейсе. поэтому я удалил петлю, но не могу отобразить новое значение расстояния в реальном времени.

сначала я рассчитал расстояние между первой и последней точкой моего маршрута и сделал это значение максимальным значением моего ползунка. значение ползунка, которое должно динамически изменяться, - это расстояние от начальной точки.

private async  void Prog()
        {
            var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 50;
            var position = await locator.GetPositionAsync(TimeSpan.FromSeconds(1));
            double startpoint = distance_on_geoid(position.Latitude,position.Longitude,JSONData.GetGlcLatitude1()[0],JSONData.GetGlcLongitude1()[0]);
            double endpoint = distance_on_geoid(position.Latitude, position.Longitude, JSONData.GetGlcLatitude1()[JSONData.GetGlcLatitude1().Count-1], JSONData.GetGlcLongitude1()[JSONData.GetGlcLongitude1().Count-1]);
            double alertDistance = distance_on_geoid(JSONData.GetGlcLatitude1()[0], JSONData.GetGlcLongitude1()[0], JSONData.GetGlcLatitude1()[JSONData.GetGlcLatitude1().Count - 1], JSONData.GetGlcLongitude1()[JSONData.GetGlcLongitude1().Count - 1]);
            slider.Maximum = alertDistance;

            double startpoint_ = Convert.ToDouble(String.Format("{0:0.00}", startpoint));
            test.Text = startpoint_.ToString();
                if (startpoint_>=0.01)
                {
                    slider.IsVisible = true;
                    slider.Value = alertDistance - endpoint;

            }
                else
                {
                    slider.IsVisible = false;
                }

        }

(JSONData ... это значения моего маршрута)

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

1 Ответ

0 голосов
/ 10 мая 2019

Я вижу проблему сейчас, это происходит потому, что вы вносите изменения в пользовательский интерфейс из фонового потока и делаете что-то вроде этого:

Device.BeginInvokeOnMainThread (() => 
{
 slider.IsVisible = true;
 slider.Value = alertDistance - endpoint;
}

Всегда следите за тем, чтобы изменения в пользовательском интерфейсе были включеныMainThread, а не какой-то фоновый поток, т.е. при использовании async-await, например,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...