我在Winform应用程序中使用gmap.net地图控件。尽管我们更新了所有系统,但它在开发人员计算机上运行良好,但在客户端计算机上崩溃。但是几分钟后,地图崩溃了,并给出以下网络框架错误
我过去曾经使用过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讨论论坛上获得有关问题的更多有用答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句