Производительность загрузки MapPoint 2009
-
09-06-2019 - |
Вопрос
У меня возникли проблемы с интеграцией MS MapPoint 2009 в мое приложение WinForms .Net 2.0 на C#.Я добавил в форму элемент управления ActiveX MapPoint, и у меня не возникло проблем с отображением карт и местоположений;меня беспокоит время, необходимое для загрузки карты после ее создания.
Тесты на моей машине разработки показали, что среднее время загрузки составляет от 3 до 5 секунд, в течение которых приложение полностью заблокировано.Хотя это не совсем неприемлемо, потеря контроля над приложением занимает очень много времени.Кроме того, поскольку поток графического интерфейса заблокирован, я не могу отобразить диалоговое окно загрузки или что-то еще, чтобы замаскировать время загрузки.
Висит вот такая строка:(где axMappointControl1 — это элемент управления MapPoint)
axMappointControl1.NewMap(MapPoint.GeoMapRegion.geoMapNorthAmerica);
Я попытался выполнить метод NewMap в другом потоке, но поток графического интерфейса все равно блокируется.
Мои вопросы:
- Что я могу сделать, чтобы ускорить загрузку MapPoint?
- Есть ли способ загрузить MapPoint, чтобы он не блокировал поток графического интерфейса?
Любая помощь очень ценится.
Решение
В соответствии с эти потоки На сайте mapforums.com медлительность запуска ActiveX хорошо известна и неизбежна (хотя вопрос о многопоточности для повышения скорости отклика графического интерфейса все еще открыт.
Было предложено отказаться от версии ActiveX в пользу объекта MapPoint.Application.
Надеюсь, это поможет.
Другие советы
Да, версия приложения работает в своем собственном потоке, так что это должна быть более быстрая альтернатива - легче делать свои собственные вещи во время запуска.Однако запуск MapPoint 2010 пользователем обычно занимает несколько секунд.
Я бы создал временный поток графического интерфейса и использовал его для отображения заставки во время запуска и/или выполнения любой потокобезопасной инициализации, которая вам нужна.
Все вызовы экземпляра MapPoint (или элемента управления ActiveX) должны выполняться из того же потока, в котором создается элемент управления MapPoint или объект приложения.