首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地图控制Gmap.net崩溃

地图控制Gmap.net崩溃
EN

Stack Overflow用户
提问于 2014-06-03 11:28:53
回答 3查看 3.1K关注 0票数 2

我在我的winform应用程序中使用gmap.net地图控件。它运行良好的开发人员计算机,但崩溃的客户计算机,虽然我们更新所有的系统。但是过了几分钟,地图就崩溃了,并给出了下面的网络框架错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-03 20:51:57

我以前使用过GMap.NET控件,也遇到过类似的问题。从背景中的大胖红十字会判断,GMap.NET控件在其OnPaint方法中已经崩溃。抛出的enumeration operation may not execute错误通常是在迭代集合时修改集合造成的:这是框架中大多数集合类型所不允许的。

在其OnPaint方法中,GMap.NET控件迭代许多集合,其中包括GMapControl.Overlays集合以及这些覆盖的GMapOverlay.MarkersGMapOverlay.RoutesGMapOverlay.Polygons集合。在我的例子中,当控件试图完成它的绘制时,我从后台线程修改了这些集合,从而迭代了这些集合。这导致了与你现在所观察到的行为相似的行为。

我注意到GMap.NET对上述所有集合都使用了一个名为ObservableCollectionThreadSafe<T>的自定义集合类。这个名称意味着线程安全,因此可以容忍迭代期间的修改,但是我还没有研究它的实现,所以我不确定这是否是真的。我的观察似乎表明情况并非如此,但这是很久以前的事了。

当时,我通过将上述集合修改为GUI线程(由于缺少可锁定的同步对象)来解决我的问题。调用确保修改不可能与GMapControl.OnPaint方法同时运行,该方法也总是在GUI线程上运行。

至于为什么你没有在你的机器上观察这种行为:这可能是由于许多原因。也许你很幸运,也许你使用的应用程序与客户端不同,等等。

顺便说一句,你可能会在GMap.NET论坛上得到对你的问题更有帮助的答案。

票数 4
EN

Stack Overflow用户

发布于 2019-06-20 15:35:53

要解决这个问题,您必须在更新或添加标记或多边形时禁用失效:

代码语言:javascript
复制
MyMap.HoldInvalidation = True

'
' Add markers or polygons now
' 

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

Stack Overflow用户

发布于 2014-06-03 12:40:56

您缺少运行应用程序所需的dll,我建议在本地系统上复制完整的bin文件夹,然后尝试运行应用程序。如果您已经创建了msi包,请确保正确地添加了依赖项。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24014020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档