Pregunta

Estoy usando el control de mapas gmap.net en mi aplicación winform.Funciona bien en las computadoras de los desarrolladores, pero falla en las computadoras de los clientes. Aunque actualizamos todos los sistemas.pero después de unos minutos el mapa falla y aparece el siguiente error de marco de redenter image description here

¿Fue útil?

Solución

He usado el control GMap.NET en el pasado y me encontré con un problema similar.A juzgar por la gran cruz roja en el fondo, el control GMap.NET se bloqueó durante su OnPaint método.El enumeration operation may not execute El error que se produce normalmente se debe a la modificación de una colección mientras se itera:esto es algo que la mayoría de los tipos de colecciones del marco no permiten.

En su OnPaint método, el control GMap.NET itera numerosas colecciones, entre otras las GMapControl.Overlays colección y el GMapOverlay.Markers, GMapOverlay.Routes y GMapOverlay.Polygons colecciones de estas superposiciones.En mi caso, estaba modificando estas colecciones desde un hilo de fondo mientras el control intentaba pintar y, por lo tanto, iteraba estas colecciones.Esto resultó en un comportamiento similar al que estás observando ahora.

Noté que GMap.NET usa una clase de colección personalizada llamada ObservableCollectionThreadSafe<T> para toda la colección antes mencionada.El nombre implica seguridad de subprocesos y, por lo tanto, posible tolerancia a modificaciones durante la iteración, pero no he estudiado su implementación, por lo que no estoy seguro de si esto es cierto.Mis observaciones parecían indicar lo contrario, pero de esto fue hace bastante tiempo.

En ese momento, resolví mis problemas invocando modificaciones a las colecciones mencionadas anteriormente en el hilo de la GUI (por falta de un objeto de sincronización para bloquear).La invocación garantiza que las modificaciones no puedan ejecutarse simultáneamente con la GMapControl.OnPaint método, que siempre se ejecutará también en el subproceso de la GUI.

En cuanto a por qué no observa este comportamiento en su máquina:Esto podría deberse a numerosas razones.Quizás haya tenido suerte, quizás esté usando la aplicación de manera diferente al cliente, etc.

Probablemente pueda obtener respuestas más útiles a su pregunta en el Foro de discusiones sobre GMap.NET por cierto.

Otros consejos

La versión de usuario tal vez faltando el Formulario de Windows específico DLL como, así como el Core.dll, esto depende de lo que la versión del usuario se ejecuta desde I.e Visual Studio o Packaged .NET. Aplicación que se haya instalado en la PC del usuario.Si este no es el caso, puede ser mejor buscar ayuda de los foros GMAP.

Para solucionar esto, debe deshabilitar la invalidación mientras actualiza o agregando marcadores o polígonos:

MyMap.HoldInvalidation = True

'
' Add markers or polygons now
' 

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

Le falta la DLL que se requiere para ejecutar la aplicación, sugeriría copiar la carpeta de contenedor completa en su sistema local y luego intente ejecutar la aplicación.Si ha creado el paquete MSI, asegúrese de que la dependencia se agreguen correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top