Вопрос

Я использую gmap.net Управление картой в своем приложении winform.он хорошо работает на компьютерах разработчиков, но дает сбой на компьютерах клиентов, хотя мы обновляем все системы.но через несколько минут карта выходит из строя и выдает следующую ошибку net frameworkenter image description here

Это было полезно?

Решение

Я использовал элемент управления GMap.NET в прошлом, и я столкнулся с аналогичной проблемой.Судя по большому жирному красному кресту на заднем плане, GMap.NET управление вышло из строя во время OnPaint способ.Тот Самый enumeration operation may not execute возникающая ошибка обычно вызывается изменением коллекции при ее повторении:это то, чего не допускает большинство типов коллекций в фреймворке.

В своем OnPaint метод, элемент управления GMap.NET перебирает многочисленные коллекции, среди прочего GMapControl.Overlays коллекция и GMapOverlay.Markers, GMapOverlay.Routes и GMapOverlay.Polygons коллекции этих наложений.В моем случае я изменял эти коллекции из фонового потока, в то время как элемент управления пытался выполнить его рисование, и, таким образом, повторял эти коллекции.Это привело к поведению, аналогичному тому, что вы наблюдаете сейчас.

Я заметил, что GMap.NET использует пользовательский класс коллекции под названием ObservableCollectionThreadSafe<T> для всей вышеупомянутой коллекции.Название подразумевает потокобезопасность и, следовательно, возможную допускаемость изменений во время итерации, но я не изучал его реализацию, поэтому не уверен, правда ли это.Мои наблюдения, казалось, указывали на обратное, но это было довольно давно.

В то время я решал свои проблемы с помощью вызывающий модификации вышеупомянутых коллекций в потоке GUI (из-за отсутствия объекта синхронизации для блокировки).Вызов гарантирует, что модификации не смогут выполняться одновременно с GMapControl.OnPaint метод, который также всегда будет выполняться в потоке GUI.

Относительно того, почему вы не наблюдаете такого поведения на своем компьютере:это может быть связано с множеством причин.Возможно, вам повезло, возможно, вы используете приложение иначе, чем клиент, и т.д.

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

Другие советы

Версия пользователя может отсутствовать в определенной DLL Windows Form DLL, а также Core.dll, это зависит от того, что версия пользователя работает с I.E Visual Studio или упакованной приложения .NET, которое было установлено на ПК пользователя.Если это не так, возможно, может быть наилучшим образом искать помощь от форумов GMAP.

Чтобы исправить это, вы должны отключить недействительные во время обновления или добавления маркеров или полигонов:

MyMap.HoldInvalidation = True

'
' Add markers or polygons now
' 

MyMap.HoldInvalidation = False      ' Not sure if this line is needed
MyMap.Refresh()
.

Вы отсутствуете в DLL, которые необходимы для запуска приложения, я бы предложил скопировать полную папку Bin в локальной системе, а затем попробуйте запустить приложение.Если вы создали пакет MSI, они убедитесь, что зависимость добавляется правильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top