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

发布于 2014-06-03 20:51:57
我以前使用过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论坛上得到对你的问题更有帮助的答案。
发布于 2019-06-20 15:35:53
要解决这个问题,您必须在更新或添加标记或多边形时禁用失效:
MyMap.HoldInvalidation = True
'
' Add markers or polygons now
'
MyMap.HoldInvalidation = False ' Not sure if this line is needed
MyMap.Refresh()发布于 2014-06-03 12:40:56
您缺少运行应用程序所需的dll,我建议在本地系统上复制完整的bin文件夹,然后尝试运行应用程序。如果您已经创建了msi包,请确保正确地添加了依赖项。
https://stackoverflow.com/questions/24014020
复制相似问题