Движущийся объект (канцелярская кнопка) на карте

Я читаю файл движущихся объектов и помещаю их в словарь (validMovingObjects). Я представляю каждый объект в виде кнопки на карте (baseMap). Когда объект меняет свое местоположение (широту или долготу), я обновляю validMovingObjects (удаляя старый экземпляр и вставляя новый). Затем я добавляю все объекты validMovingObjects в слой карты (objectsLayer) и еще в baseMap. Я делаю это с каждым чтением из файла, вызывая метод refereshMap ниже.

Эта проблема:

Вешки не двигаются. Только последние местоположения движущихся объектов отображаются на карте в виде статических кнопок.

Любая помощь будет оценена. Спасибо

public void refereshMap(MapLayer objectsLayer, Microsoft.Maps.MapControl.WPF.Map baseMap)
{
    System.Threading.Thread.Sleep(500);

    baseMap.Children.Clear();

    objectsLayer.Children.Clear();

    PositionOrigin objectPositionOrigin = PositionOrigin.Center;

    Location objectLocation;

    foreach (KeyValuePair<int, MovingObject> pair in validMovingObjects) 
    {        
        objectLocation = new Location(pair.Value.objectLatitude,pair.Value.objectLongitude);

        objectsLayer.AddChild(pair.Value.objectPin, objectLocation, objectPositionOrigin);
    }

    baseMap.Children.Add(objectsLayer);
}

1 ответ

Решение

Вы, конечно, блокируете поток пользовательского интерфейса, неоднократно вызывая refreshMap метод в цикле.

Рассмотрите возможность обновления позиций кнопок в Tick обработчик события DispatcherTimer.

Обратите внимание, что нет необходимости постоянно удалять и добавлять кнопки в ваш objectLayer, После добавления кнопки в MapLayer вы можете просто изменить ее MapLayer.Position собственность

Другие вопросы по тегам